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

10
我正在尝试使用下面的Rails控制器调用一个连接到postgres db的Ruby脚本,但似乎它无法加载其中一个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#runmyscript中的LoadError

无法加载此类文件- pg_ext

Rails.root:/usr/local/rvm/my_app 应用程序跟踪|框架跟踪 |完整跟踪app/controllers/Testdl_controller.rb:3:in `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


你是否已经安装了带有依赖关系的 'pg' gem? - AJcodez
我不确定我是否安装了带有依赖关系的 gem。当我最初安装 gem 时,我使用了以下命令:gem install pg -- --with-pg-config='/usr/local/PostgreSQL/9.1/bin/pg_config'。 - user1562080
2
在Rails中,难道不应该在Gemfile中添加gem 'pg',并通过运行bundle install安装所有带有依赖的gems吗? - user519736
请查看此线程 https://dev59.com/um_Xa4cB1Zd3GeqPwxGQ - user391990
3个回答

1

我曾经遇到过同样的问题。我有一个独立的 Ruby 脚本,它通过 pg 连接到 postgres,如果我直接从 shell 运行它,它可以正常工作。

但是,如果我尝试通过 rspec 运行它,就会出现错误 cannot load such file -- pg

解决方案:rspec 的问题在于 Gemfile 中没有定义 pg gem。将 pg 放入 Gemfile 中后,重新通过 rspec 测试,问题得以解决。


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

0

尝试在您的Gemfile中添加一行:

gem "pg"

然后通过命令行运行bundler:

bundle install

Rails使用Bundler来管理您的gems和依赖项。您可以在此处阅读有关Bundler背后思想的更多信息:http://gembundler.com/v1.2/rationale.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接