避免rake资产的正确方法是什么:Heroku上的预编译错误

时间:2012-05-04 10:27:55

标签: ruby-on-rails ruby-on-rails-3 heroku asset-pipeline

我在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?

即使guide建议将config.assets.initialize_on_precompile设置为false,但提及:

  

确保测试rake资产:在部署之前在本地进行预编译。它   可能会暴露您的资产引用应用程序对象的错误或   方法,因为它们仍处于开发模式的范围内,无论如何   这个标志的价值。

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

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

Rails 3.1 assets:precompile Connecting to Database

rake assets:precompile not working on heroku

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

PS 即可。只是为了清楚。正在运行rake assets:precompile RAILS_ENV=developmentrake assets:precompile RAILS_ENV=production正确的本地运行方式吗?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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

根据here和其他地方