4

我在 Rails 3.2.2 上运行并部署在 Cedar 堆栈上。我仍然收到以下错误:

-----> Writing config/database.yml to read from DATABASE_URL
-----> 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?

甚至指南也建议设置config.assets.initialize_on_precompile为 false,但提到:

确保在部署之前测试 rake assets:precompile 在本地。它可能会暴露您的资产引用应用程序对象或方法的错误,因为无论此标志的值如何,这些仍然在开发模式的范围内。

诸如此类的一些文章建议使用Heroku labs。但即便如此,它也有其自身的含义,因为它仍处于测试阶段。

我在网上阅读了其他几个来源,包括:

Rails 3.1 assets:precompile 连接到数据库

rake 资产:预编译不适用于 heroku

都有不同的解决方案。那么避免这个错误的正确方法是什么?有人在 Heroku 实验室遇到过什么大问题吗?有更好的方法吗?

附言。只是要清楚。是在本地运行rake assets:precompile RAILS_ENV=development还是rake assets:precompile RAILS_ENV=production在本地运行它的正确方法?

4

2 回答 2

2

问题源于您的应用程序在运行该 rake 任务时尝试连接到 postgres。摆脱错误的唯一方法是阻止这种情况发生,或者使用user_env_compile您提到的附加组件。

于 2012-05-04T11:52:51.943 回答
1

(1) 我总是按照你的建议添加这个

config.assets.initialize_on_precompile = false

(2) 而且,如果使用 ActiveAdmin 和/或 Devise,在预编译资产时通过如下编码 routes.rb 排除它们的路由

  unless ARGV.join.include?('assets:precompile')
    ActiveAdmin.routes(self)

    devise_for :admin_users, ...etc....
    devise_for :users, ...etc...

    devise_scope :user do
    get "/login", ..etc
  end

根据这里和其他地方

于 2012-05-10T10:04:57.470 回答