3

所以我花了一天的时间阅读每一个 SO 问题,甚至是轻微相关的问题,并检查了 Heroku 文档。

这是推送时的 Heroku 问题:

-----> Preparing app for Rails asset pipeline
   Running: rake assets:precompile
   rake aborted!
   could not connect to server: Connection refused
   Is the server running on host "127.0.0.1" and accepting
   TCP/IP connections on port 5432?

我敢肯定这很熟悉。

我知道,随着 Rails 4 上的 Heroku 部署发生了很多变化,但我什至尝试了许多 4.0 之前的建议来尝试修复它。

它的:

   /tmp/build_22xpuyyrmltz6/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.0/lib/active_record/connection_adapters/postgresql_adapter.rb:825:in `initialize'
   /tmp/build_22xpuyyrmltz6/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.0/lib/active_record/connection_adapters/postgresql_adapter.rb:825:in `new'
   /tmp/build_22xpuyyrmltz6/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.0/lib/active_record/connection_adapters/postgresql_adapter.rb:825:in `connect'
   /tmp/build_22xpuyyrmltz6/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.0/lib/active_record/connection_adapters/postgresql_adapter.rb:542:in `initialize'
   /tmp/build_22xpuyyrmltz6/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.0/lib/active_record/connection_adapters/postgresql_adapter.rb:41:in `new'
   /tmp/build_22xpuyyrmltz6/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.0/lib/active_record/connection_adapters/postgresql_adapter.rb:41:in `postgresql_connection'

等等......所以从我收集的内容来看,这是因为试图在编译期间访问数据库。

到目前为止,我的问题是这个问题的副本

RAILS_ENV=production bundle exec rake assets:precompile

运行正常并生成 manifest.json,但 Heroku 无法识别它。

我也试过这个,但我认为 Rails 4 默认情况下是错误的。

config.assets.initialize_on_precompile = false

因此,我很乐意尝试的一种解决方法是:

heroku labs:enable user-env-compile

我尝试了最多,创建了新的heroku应用程序,打开和关闭它,然后再次打开。尝试了多次推送。我也在需要时做出承诺,所以事实并非如此。

还尝试了 rails_12factor 和其他一些我不记得的东西。一切都无济于事。

有什么我想念的吗?user-env-compile 似乎正在解决其他所有人的问题,但似乎对我没有影响。

我什至重新启动了我的电脑几次......任何帮助将不胜感激。

4

2 回答 2

4

某处有一个 gem 试图连接到数据库。就我而言,它是acts_as_taggable_on。我向维护者提交了一个错误。如果我注释掉模型中使用它的行,则预编译工作正常:

# acts_as_taggable
# accepts_nested_attributes_for :tags

如果 sidekiq 是你的罪魁祸首,你可以通过注释掉 mount 语句、在本地预编译资产并将它们推送到 heroku 来解决这个问题。如果 gem 的维护者修复了 bug,那么您可以在 slug 编译期间返回预编译。

有点麻烦,因为您必须记住恢复路由文件(即不要意外提交注释掉的 mount 语句)。

于 2013-09-01T20:32:05.363 回答
0

当我在 Heroku 中的应用程序未启用“Postgres 插件”时,我遇到了类似的问题。

于 2013-12-30T12:41:50.033 回答