2013-03-09 71 views
0

我在windows上工作,有rails 3.2.12(刚升级)和ruby 2.0.0p0。当我试图删除一个控制器我得到这个错误:我试图摧毁一个控制器时得到一个pg错误

F:\my apps\meshworks-redo> rails d controller Plans 
C:/Users/rrw/.pik/rubies/Ruby-200-p0/lib/ruby/gems/2.0.0/gems/pg-0.14.1-x86-mingw32/lib/pg.rb:10:in `require': cannot load such file -- 2.0/pg_ext (LoadError) 
     from C:/Users/rrw/.pik/rubies/Ruby-200-p0/lib/ruby/gems/2.0.0/gems/pg-0.14.1-x86-mingw32/lib/pg.rb:10:in `rescue in <top (required)>' 
     from C:/Users/rrw/.pik/rubies/Ruby-200-p0/lib/ruby/gems/2.0.0/gems/pg-0.14.1-x86-mingw32/lib/pg.rb:3:in `<top (required)>' 
     from C:/Users/rrw/.pik/rubies/Ruby-200-p0/lib/ruby/gems/2.0.0/gems/bundler-1.3.2/lib/bundler/runtime.rb:72:in `require' 
     from C:/Users/rrw/.pik/rubies/Ruby-200-p0/lib/ruby/gems/2.0.0/gems/bundler-1.3.2/lib/bundler/runtime.rb:72:in `block (2 levels) in require' 
     from C:/Users/rrw/.pik/rubies/Ruby-200-p0/lib/ruby/gems/2.0.0/gems/bundler-1.3.2/lib/bundler/runtime.rb:70:in `each' 
     from C:/Users/rrw/.pik/rubies/Ruby-200-p0/lib/ruby/gems/2.0.0/gems/bundler-1.3.2/lib/bundler/runtime.rb:70:in `block in require' 
     from C:/Users/rrw/.pik/rubies/Ruby-200-p0/lib/ruby/gems/2.0.0/gems/bundler-1.3.2/lib/bundler/runtime.rb:59:in `each' 
     from C:/Users/rrw/.pik/rubies/Ruby-200-p0/lib/ruby/gems/2.0.0/gems/bundler-1.3.2/lib/bundler/runtime.rb:59:in `require' 
     from C:/Users/rrw/.pik/rubies/Ruby-200-p0/lib/ruby/gems/2.0.0/gems/bundler-1.3.2/lib/bundler.rb:132:in `require' 
     from F:/my apps/meshworks-redo/config/application.rb:7:in `<top (required)>' 
     from C:/Users/rrw/.pik/rubies/Ruby-200-p0/lib/ruby/gems/2.0.0/gems/railties-3.2.12/lib/rails/commands.rb:24:in `require' 
     from C:/Users/rrw/.pik/rubies/Ruby-200-p0/lib/ruby/gems/2.0.0/gems/railties-3.2.12/lib/rails/commands.rb:24:in `<top (required)>' 
     from script/rails:6:in `require' 
     from script/rails:6:in `<main>' 

我试过重新安装pg gem,没有运气。

+0

它只是删除控制器,你的应用程序工作?至于我,我只是没有启动一个应用程序在与Ruby 2.0的Windows,同样的错误。我想'pg' mingw预编译版本预编译为1.9。 – khustochka 2013-03-09 18:38:13

+0

'rails s'返回以下错误:_无法在任何sources_中找到i18n-0.6.4,但安装gem时 – 2013-03-09 18:49:50

+0

忽略了这是我的错误(在pik中有混合版本)。不,最终答案是,服务器被该文件加载阻止 – 2013-03-09 18:54:22

回答

2

我的一位朋友在Windows 7上使用Ruby 2.0与Postgres时遇到了同样的问题。它不仅发生在试图销毁控制器时,而且发生在每个数据库操作(包括rake db:create)时。问题在于,ruby 2.0没有包含pg_ext.so文件。它包含1.9,但只是将其复制到2.0似乎不起作用。但是,我发现另一种方法来获得正确的pg_ext.so。不完全确定这是为什么起作用,但对他有用。这里是你需要做的:

  1. 转到2.0/pg_ext.so(无法找到的文件)应该位于的文件夹。在你的情况C:/Users/rrw/.pik/rubies/Ruby-200-p0/lib/ruby/gems/2.0.0/gems/pg-0.14.1-x86-mingw32/lib/。
  2. 在这里创建一个名为'2.0'(不带引号)的文件夹。
  3. 在此文件夹中,您将需要正确的pg_ext.so文件。您可以通过以下方式获取:
  4. 手动安装pg gem(“gem install pg”在控制台中)。这将安装gem的非x86-mingw32版本。它没有解决问题,但它确实创建了正确的pg_ext.so。我认为这是因为它为你的系统编译pg gem,所以对于ruby 2.0。然后,您可以将此pg_ext.so文件与pg x86-mingw32版本一起使用。您将需要DevKit来编译和安装pg(http://rubyinstaller.org/add-ons/devkit/)。
  5. 转至pg-0.14.1 gem文件夹中的pg_ext.so位置。在你的情况下,这将是C:/Users/rrw/.pik/rubies/Ruby-200-p0/lib/ruby/gems/2.0.0/gems/pg-0.14.1/lib。
  6. 从复制该文件夹到新PG-0.14.1-86-mingw32的/ lib目录/ 2.0 /文件夹中的文件pg_ext.so在步骤2中
  7. 现在重试你的命令,并检查是否一切正常。如果没有,请删除您的Gemfile.lock并重新运行软件包安装。
  8. 与其他mingw32宝石一样,这个宝石也会出现同样的问题。 IFor例如,我遇到了与bcrypt-rails gem相同的问题。按照上述相同的步骤解决了问题。我现在成功运行Windows 7上的Ruby 2.0。

Ps。如果您在Windows 7 64位上运行pg gem时遇到任何其他问题,请尝试安装Ruby(RubyInstaller)和postgresql的32位x86版本。此外,确保在路径中包含Ruby文件夹(这是使用RubyInstaller安装ruby 2.0时的一个选项)以及Postgresql lib和bin文件夹。

祝你好运!

+0

尼斯和彻底的解释。现在停止尝试在Windows机器上使用RoR;) – Arjan 2014-09-25 15:28:01

相关问题