gpt4 book ai didi

postgresql - Heroku ActiveRecord::StatementInvalid: PGError: ERROR: 上的 Sinatra 应用程序

转载 作者:行者123 更新时间:2023-11-29 12:01:01 26 4
gpt4 key购买 nike

情景:
我目前在 Heroku 上有一个应用程序,它是 Sinatra Application + ActiveRecord。目前有效:
• 我可以查看我网站的静态页面
• 我能够运行迁移
• 我能够将我的本地开发数据库推送到我的 Heroku 数据库 (heroku db:push postgres://localhost/dev)
• 我能够从 Heroku 数据库拉到我的本地主机数据库 (heroku db:pull postgres://localhost/dev)

错误:
当我导航到一个进行简单查询的页面时:

@pics = Picture.find(:all)

我在我的日志文件中得到这个错误

DEBUG -- : NoMethodError: undefined method `values' for #<PGresult:0x00000002844098>: SHOW client_min_messages  
DEBUG -- : PGError: ERROR: invalid value for parameter "client_min_messages": ""
: SET client_min_messages TO ''
ActiveRecord::StatementInvalid - PGError: ERROR: invalid value for parameter "client_min_messages": ""
/app/.bundle/gems/ruby/1.9.1/gems/activerecord-3.1.3/lib/active_record/connection_adapters/postgresql_adapter.rb:592:in `async_exec'

此时我不确定出了什么问题,所以我决定登录到 heroku 控制台 并运行此命令以查看我的表是否在数据库中

> heroku console
> ActiveRecord::Base.connection.tables

我得到了类似的错误

ActiveRecord::StatementInvalid: PGError: ERROR:  invalid value for parameter "client_min_messages": ""  
: SET client_min_messages TO ''
/app/.bundle/gems/ruby/1.9.1/gems/activerecord-3.1.3/lib/active_record/connection_adapters/postgresql_adapter.rb:592:in `async_exec'
/app/.bundle/gems/ruby/1.9.1/gems/activerecord-3.1.3/lib/active_record/connection_adapters/postgresql_adapter.rb:592:in `block in execute'
/app/.bundle/gems/ruby/1.9.1/gems/activerecord-3.1.3/lib/active_record/connection_adapters/abstract_adapter.rb:244:in `block in log'
/app/.bundle/gems/ruby/1.9.1/gems/activesupport-3.1.3/lib/active_support/notifications/instrumenter.rb:21:in `instrument'

然后我决定在控制台中尝试这个...

> ActiveRecord::Base.establish_connection

> ActiveRecord::AdapterNotSpecified: ActiveRecord::AdapterNotSpecified    
/app/.bundle/gems/ruby/1.9.1/gems/activerecord-3.1.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:54:in `establish_connection'
/home/heroku_rack/lib/console.rb:158:in `block (2 levels) in <top (required)>'
/home/heroku_rack/lib/console.rb:148:in `eval'
/home/heroku_rack/lib/console.rb:148:in `_eval'

此时我似乎没有表和适配器连接,但是当我能够运行迁移并从 Heroku DB 推送和拉取时,这怎么可能呢?


更新 1 - 没有更多进展,但有更多见解

所以我决定从头开始,重新做一遍。我似乎取得了一些进展,但我被卡住了。重新运行我上面提到的场景并成功。所以我的数据库,迁移和数据都在DB里面。但是我的应用程序仍然无法连接到数据库。但奇怪的是我的控制台交互。

> heroku console

> ActiveRecord::Base.connection_config
> {:adapter=>"postgresql", :database=>"1e2e12e21e", :username=>"1e2e12e21e", :password=>"i2j3i23joo12", :host=>"1e2-12e-2e1212-e2e2e1.compute-1.amazonaws.com", :port=>5432, :encoding=>"unicode"}

注意:我用这些假的东西替换了真实的细节只是为了说明

> ActiveRecord::Base.connection_handler  
> #<ActiveRecord::ConnectionAdapters::ConnectionHandler:0x00000002f8a578 @connection_pools={"….

注意:这是一个很长的字符串,但它有内容

> ActiveRecord::Base.connected?
> false

到这里我真的不明白了?我不知道如何继续运行数据库迁移、保持推送和拉取数据、登录 Heroku 控制台查看我的 connection_config 详细信息,但是当我运行我的应用程序内部服务器错误时。当我在 heroku console 中运行 ActiveRecord::Base.connection.tables 时,我得到 ActiveRecord::StatementInvalid: PGError: ERROR: invalid value for parameter "client_min_messages": ""

关于我可能做错了什么的想法?

最终更新

问题是这样的:Heroku 支持人员友好地向我指出了 activerecord 3.1.3 的一个已知问题。这是一个应该在未来更新中修复的错误:https://github.com/rails/rails/commit/92a3c487bb0d125c437e53a7f45c31fcca97f2d9

如何解决问题:我决定在我的 gemfile gem "activerecord", "~> 3.0.9 中使用低得多的 activerecord 版本,我的网站目前已经正常运行,没有任何问题。

为什么我以前从来没有尝试过这个,我不知道。我希望这篇文章还有其他人。

最佳答案

这个问题困扰我很久了,快把我逼疯了。我无法在任何地方找到解决方案(许多 Rails 更新都没有解决“问题”),所以我决定自己解决这个问题。事实证明这是一个简单的修复。只需添加一个额外的键值对::min_messages => "warn"(或任何您想要的消息级别)到配置 block 中的 ActiveRecord 设置。这是我现在在我的 Sinatra 应用程序中使用的,使用 Sinatra 1.3.2 和 ActiveRecord 3.2.2:

db = URI.parse(ENV['DATABASE_URL'] || "postgres://user:password@localhost/database")
adapter = (db.scheme == "postres") ? "postgresql" : db.scheme
ActiveRecord::Base.configurations[:production] = {
:adapter => adapter,
:username => db.user,
:password => db.password,
:port => db.port,
:database => db.path.sub(%r(^/),""),
:host => db.host,
:min_messages => "warn"
}
unless ActiveRecord::Base.connected?
ActiveRecord::Base.establish_connection ActiveRecord::Base.configurations[:production]
ActiveRecord::Base.logger = Logger.new(STDOUT)
end

希望这对您和其他遇到这些问题的人有帮助!

关于postgresql - Heroku ActiveRecord::StatementInvalid: PGError: ERROR: 上的 Sinatra 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8775406/

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