gpt4 book ai didi

ruby-on-rails - require 'pg' 返回 true 但未能定义 PGconn 和 PG

转载 作者:行者123 更新时间:2023-11-29 13:30:46 24 4
gpt4 key购买 nike

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

到目前为止,只有服务器有这个问题,而且只在TestLogger。其他确实需要“pg”的 ruby​​ 代码获取 PG 和 PGconn 没有问题。在我的开发机器 (Mac) 上一切正常。

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

失败的环境是这样构建的:我有一个包含 autorun.rb、Gemfile(+通过运行 bundle install 生成的新 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”而终止,所以看起来 require '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——这可能是问题所在吗?我检查?

最佳答案

(根据 Simon B. 对归因的回答进行复制和粘贴 - 感谢 Simon)

在 teSTLogger.rb 中:

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

这会打印出哪些文件实际上是由 require 'pg' 加载的由于它是 activerecord-jdbc-adapter,并且由于 jdbc 用于 java/jruby,并且由于 Simon 使用 MRI,因此解决方案是卸载 jdbc 适配器。

卸载

gem uninstall activerecord-jdbc-adapter

工作

关于ruby-on-rails - require 'pg' 返回 true 但未能定义 PGconn 和 PG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24282608/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com