2012-07-30 195 views
7

我想调用一个Ruby脚本(它连接到一个postgres数据库)下面的rails控制器,但它似乎有问题加载之一PG宝石文件。我已经将我的要求声明设置为要求'pg'并尝试了绝对路径(要求/usr/local/rvm/gems/[email protected]/gems/pg-0.14.0/lib/pg/)。文件'pg_ext'实际上存在于该目录中。另外,我可以独立运行ruby脚本,没有任何问题(dbrubyscript.rb),但是当rails被添加到这个等式中时,会出现cannot load such file -- pg_ext错误。Rails/Ruby/Postgres的 - LoadError无法加载这样的文件 - 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") 
..... 

跟踪错误: LoadError在TestdlController#runmyscript

cannot load such file -- pg_ext

Rails.root: /usr/local/rvm/my_app Application Trace | Framework Trace | Full Trace app/controllers/Testdl_controller.rb:3:in `runmyscript'

This error occurred while loading the following files:
/usr/local/rvm/my_app/ruby_scripts/reports/dbrubyscript.rb
/usr/local/rvm/gems/[email protected]/gems/pg-0.14.0/lib/pg/
pg_ext

+0

你有没有用gem安装'pg'gem的依赖关系? – AJcodez 2012-07-30 08:19:57

+0

我不确定是否安装了依赖关系的gem。当我最初安装gem时,我使用了下面的命令:gem install pg - --with-pg-config ='/ usr/local/PostgreSQL/9.1/bin/pg_config' – user1562080 2012-07-30 14:15:34

+2

是不是应该添加'gem' pg''到Rails中的Gemfile,并通过运行'bundle install'来安装所有的依赖关系的gem? – rekado 2012-12-05 08:18:57

回答

-1

尝试添加一行到您的Gemfile:

bundle install 

Rails的用途:

gem "pg" 

然后通过命令行运行捆绑Bundler来管理你的宝石和依赖。您可以在这里阅读更多关于Bundler背后的想法:http://gembundler.com/v1.2/rationale.html

0

尝试运行ruby /usr/local/rvm/gems/[email protected]/gems/pg-0.14.0/lib/ pg/ext/extconf.rb并查看你得到的错误。这帮助我确定在我的情况下,我的PostgreSQL客户端太旧了。由于您似乎安装了current-ish版本,因此您的错误可能会有所不同。

0

我有同样的问题。 我有一个独立的红宝石脚本。它通过pg连接到postgres并且如果我直接从shell运行它,它就会工作。

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

已解决:rspec的问题是,pg宝石未在Gemfile中定义。将pg放入Gemfile后,通过rspec重新测试,它工作正常。

相关问题