尝试销毁控制器时出现pg错误

时间:2013-03-09 18:36:04

标签: ruby-on-rails ruby postgresql

我在Windows上工作,拥有rails 3.2.12(刚刚升级)和ruby 2.0.0p0。当我尝试删除控制器时,我收到此错误:

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,没有运气。

1 个答案:

答案 0 :(得分:2)

我的一个朋友在使用Postgres的Windows 7上使用Ruby 2.0时遇到了同样的问题。它不仅在尝试销毁控制器时发生,而且在每个数据库操作(包括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. 在步骤2中将文件pg_ext.so从此文件夹复制到新的pg-0.14.1-x86-mingw32 / lib / 2.0 /文件夹。
  7. 现在重试命令并检查一切是否正常。如果没有,请删除Gemfile.lock并重新运行bundle install。
  8. 与其他mingw32宝石一样,这个宝石也可能出现同样的问题。在IFor示例中,我遇到了与bcrypt-rails gem相同的问题。按照上述相同的步骤解决了问题。我现在在Windows 7上成功运行Ruby 2.0。
  9. 聚苯乙烯。如果在Windows 7 64位上运行pg gem时遇到任何其他问题,请尝试安装32位x86版本的Ruby(RubyInstaller)和postgresql。此外,请确保在路径中包含Ruby文件夹(这是使用RubyInstaller安装ruby 2.0时的一个选项)以及Postgresql lib和bin文件夹。

    祝你好运!