在我的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 - 这可能是问题,怎么可能我检查了吗?
答案 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
曾为