require'pg'返回true但无法定义PGconn和PG

时间:2014-06-18 09:59:52

标签: ruby-on-rails postgresql rvm ruby-on-rails-2 ruby-1.9.3

在我的TestLogger类中,require'pg'(版本0.16.0)返回true,但PGconn未注册。

到目前为止,只有服务器出现此问题,并且仅在TestLogger中。 其他需要'pg'的ruby代码获取PG和PGconn没有问题。 一切都在我的开发者机器(Mac)上运行。

所以问题只发生在服务器(Debian)上,而且只发生在TestLogger中。

失败的环境是这样构建的:我有一个包含autorun.rb,Gemfile(通过运行bundle install生成的+ new Gemfile.lock)和testlogger.rb的文件夹。 autorun.rb脚本有时是手动运行的,有时是从cron运行的,但总是在执行cd $ some_folder; cd autorun_folder在启动之前,从而确保加载适当的环境(rvm和Gemfile)。

TestLogger看起来像这样:

# encoding: UTF-8
class TestLogger
  def initialize(opt = {})
    require 'pg'
    @@pg = PGconn.open :dbname => 'statuslog'
  end
end

autorun.rb就像这样开始:

require_relative './testlogger'
$runlog = TestLogger.new
...

并且代码以“PGconn missing”消失,因此似乎需要'pg',而返回true,实际上并没有像往常那样真正加载PG和PGconn。 奇怪的是,由autorun启动的任务也使用postgres(需要'pg'和PGconn.open ...)并且它在那里工作。它使用相同的表'statuslog'并由同一个用户运行。

我还检查了$ PATH和$:以及我的.rvm文件夹,查找可以通过require而不是想要找到的任何pg.rb。 我发现activerecord -jdbc-adapter-1.2.9 / lib / pg.rb(反过来加载PG)和heroku-2.35.0 / lib / heroku / command / pg.rb - 这可能是问题,怎么可能我检查了吗?

1 个答案:

答案 0 :(得分:1)

(按照Simon B.的归属答案复制和粘贴 - 感谢Simon)

在testlogger.rb中:

before = $LOADED_FEATURES.dup
require 'pg'
p $LOADED_FEATURES-before

这会打印需要'pg'实际加载的文件 因为它是activerecord-jdbc-adapter,并且因为jdbc用于java / jruby,并且因为Simon使用MRI,所以解决方案是卸载jdbc适配器。

使用

卸载
gem uninstall activerecord-jdbc-adapter

曾为