Rails / Ruby / Postgres - LoadError无法加载此类文件 - pg_ext

时间:2012-07-30 06:47:02

标签: ruby-on-rails ruby pg

我正在尝试使用下面的rails控制器调用一个Ruby脚本(连接到postgres数据库),但是它似乎在加载一个PG gem文件时遇到问题。我已将require语句设置为require'pg'并尝试了绝对路径(require /usr/local/rvm/gems/ruby-1.9.3-p194@railsTest/gems/pg-0.14.0/lib/pg/)。文件'pg_ext'实际上存在于目录中。另外,我可以独立运行ruby脚本而没有任何问题(dbrubyscript.rb),但是当rails被添加到这个等式时,它会出现cannot load such file -- pg_ext错误。

这里的任何方向都会非常感激,因为我无法在网上找到解决此问题的任何内容

Rails控制器:

class TestdlController < ApplicationController
def runmyscript
  load "/usr/local/rvm/my_app/ruby_scripts/reports/dbrubyscript.rb"
  send_file '/usr/local/rvm/tmp/failedtests.csv', :type => 'text/csv', :disposition => 'inline'
  flash[:notice] = "Reports are being processed..."
end
end

.rb文件(dbrubyscript.rb)具有以下内容:

require 'rubygems'
require 'pg'

connects to (production) database
@conn = PGconn.connect("zzzzz.test.prod", 5432,"","","yyyyy_prod" ,"postgres", "xxxxxx")
.....

跟踪错误:  TestdlController中的LoadError#runmyscript

  

无法加载此类文件 - pg_ext

     

Rails.root:/ usr / local / rvm / my_app应用程序跟踪|框架跟踪   |完全跟踪app / controllers / Testdl_controller.rb:3:在`runmyscript'

中      

加载以下文件时发生此错误:
  /usr/local/rvm/my_app/ruby_scripts/reports/dbrubyscript.rb
  /usr/local/rvm/gems/ruby-1.9.3-p194@railsTest/gems/pg-0.14.0/lib/pg/
  pg_ext

3 个答案:

答案 0 :(得分:0)

尝试运行ruby /usr/local/rvm/gems/ruby-1.9.3-p194@railsTest/gems/pg-0.14.0/lib/pg/ext/extconf.rb并查看您获得的错误。这有助于我确定在我的情况下,我的PostgreSQL客户端太旧了。您的错误可能会有所不同,因为您似乎安装了当前版本。

答案 1 :(得分:0)

我遇到了同样的问题。 我有一个独立的红宝石脚本。它通过pg连接到postgres,如果我直接从shell运行它,就可以使用它。

如果我尝试通过rspec运行它,我会收到错误cannot load such file -- pg

解决了:rspec的问题是,pg中没有定义Gemfile gem。将pg放入Gemfile后,通过rspec重新测试,就可以了。

答案 2 :(得分:-2)

尝试在Gemfile中添加一行:

gem "pg"

然后通过命令行运行bundler:

bundle install

Rails使用Bundler来管理您的宝石和依赖项。你可以在这里阅读更多关于Bundler背后的想法:http://gembundler.com/v1.2/rationale.html