升级到Rails 3.1 Asset Pipeline证明是有问题的

时间:2013-02-16 12:36:27

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

我正在尝试升级已部署到Heroku的应用程序,以便在Rails 3.1中使用资产管道。我按照RailsCasts #282中的所有必要步骤操作,我的应用在本地运行正常。但是,当我推送到Heroku并尝试访问根路径时,我收到了排序"foobarbaz.png" is not precompiled的错误。如果我从页面中删除第一个图像,下一个图像会出现相同的错误,依此类推。所有的图像都被推送到了Heroku,所以没有尝试引用不存在的图像。

我注意到当我将应用程序推送到Heroku时,我确实/没有看到以下输出:

-----> Preparing Rails asset pipeline
       Running: rake assets:precompile

我尝试在本地运行rake assets:precompile并继续收到以下错误:

rake aborted!
production database is not configured

由于使用了Heroku,我的database.yml文件中没有生产配置。当我尝试运行heroku run rake assets:precompile时,出现以下错误:

rake aborted!
Application has been already initialized.

我已经在application.rb和我的环境文件中添加了必要的行,而我似乎无法让它工作!

2 个答案:

答案 0 :(得分:2)

这个问题也发生在我身上,在我的情况下,这是因为我在config / application.rb上有以下行:

config.assets.initialize_on_precompile = false

根据Heroku(https://devcenter.heroku.com/articles/rails-asset-pipeline),在某些版本的Rails中似乎需要它,

  

在预编译资产时,在Rails 3.x中,您可以阻止初始化   您的应用程序并通过确保连接到数据库   以下行位于config / application.rb中:

     

config.assets.initialize_on_precompile = false

但在我的情况下它抛出'应用程序已经初始化'的异常,并且在我删除它之后就消失了

由于Heroku日志在部署时并没有真正帮助,我测试它的方式是在我的heroku实例上运行资产预编译rake任务:

heroku运行rake资产:预编译

答案 1 :(得分:1)

如果文件manifest.yml存在,Heroku假设您正在进行自己的预编译(您遇到问题)。

从您的public或public / assets文件夹中删除manifest.yml。

将更改推送到heroku。示例如下。

$ git rm public/assets/manifest.yml
$ git commit -m "remove precompile manifest"
$ git push -f heroku master

在heroku服务器上运行资产:预编译。输入:

$ heroku run rake assets:precompile