【问题标题】:I get a pg error when trying to destroy a controller尝试销毁控制器时出现 pg 错误
【发布时间】:2013-03-09 18:36:04
【问题描述】:

我在 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,但没有成功。

【问题讨论】:

  • 它只是删除控制器,你的应用程序工作吗?至于我,我只是无法使用 ruby​​ 2.0 在 Windows 上启动应用程序,同样的错误。我想pgmingw 预编译版本是为 1.9 预编译的。
  • rails s 返回以下错误:在任何来源中都找不到 i18n-0.6.4 但是 gem 已安装
  • 忽略这一点,这是我的错(在 pik 中有混合版本)。不,最终答案,服务器被该文件加载阻塞
  • 如果你降级到 Ruby 1.9 会发生什么?
  • 好吧,它从第二条评论中弹出错误,我尝试重新安装 i18n gem 并收到错误ERROR: Could not find a valid gem 'i18n' (&gt;= 0), here is why: Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed ( https://rubygems.org/latest_specs.4.8.gz)

标签: ruby-on-rails ruby postgresql


【解决方案1】:

我的一个朋友在带有 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 文件夹。

祝你好运!

【讨论】:

  • 很好的解释。现在停止尝试在 Windows 机器上使用 RoR ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-19
  • 2017-02-06
  • 2021-10-01
  • 2012-08-21
  • 2015-10-25
  • 2019-09-11
  • 1970-01-01
相关资源
最近更新 更多