我正在尝试升级已部署到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和我的环境文件中添加了必要的行,而我似乎无法让它工作!
答案 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