0

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

4

1 回答 1

2

我的一个朋友在带有 Postgres 的 Windows 7 上使用 Ruby 2.0 时遇到了同样的问题。它不仅发生在尝试销毁控制器时,而且发生在每个数据库操作(包括 rake db:create)时。问题是 pg_ext.so 文件不包含在 ruby​​ 2.0 中。它包含在 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”)。这将安装非 x86-mingw32 版本的 gem。它不能解决问题,但它确实创建了正确的 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_ext.so 从此文件夹复制到步骤 2 中新的 pg-0.14.1-x86-mingw32/lib/2.0/ 文件夹。
  7. 现在重试您的命令并检查是否一切正常。如果没有,请删除您的 Gemfile.lock 并重新运行捆绑安装。
  8. 其他 mingw32 gem 也可能会出现与此 gem 相同的问题。例如,我在使用 bcrypt-rails gem 时遇到了同样的问题。按照与上述相同的步骤解决了该问题。我现在可以在 Windows 7 上成功运行 Ruby 2.0。

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

祝你好运!

于 2013-03-11T13:41:45.247 回答