Heroku在部署时不会预编译资产

时间:2013-07-15 22:10:22

标签: ruby-on-rails heroku

在文档中非常明确地说如果我不在本地预编译它就会这样做。

说实话,我没兴趣在本地预编译这些。

我在 production.rb 中有什么,我在 application.rb 中重复了

在我的 production.rb

config.serve_static_assets = false
config.assets.compile = false

config.assets.precompile << 'application.js'
config.assets.precompile << 'application.css'
config.assets.precompile << 'screen.css'

然后我部署,然后返回:

-----> Compiled slug size: 52.4MB
-----> Launching... done, v28
       http://myapp.herokuapp.com deployed to Heroku

所以它“编译”了一些东西,对吧?除了没有,我去了网站,.css和.js文件是空白的。

为了在本地预编译,我需要在 bootstraps_and_overrides.css 中注释掉这一行:

@import "screen.css.scss"; 

然后它在本地预编译,我的本地机器将无法正确加载css,但远程它将实际正常工作。

所以我现在的部署方法是注释掉那行代码,

bundle exec rake assets:precompile
git add .
git commit -m "Adding public/assets"
git push heroku development:master

然后(不幸!):

bundle exec rake assets:clean

然后取消注释我的.css中的那行代码。

4 个答案:

答案 0 :(得分:17)

要检查的一些事项

  1. 你在雪松上,对吧? Heroku仅在Cedar上支持此行为。
  2. 你在使用Rails 3,对吧? Heroku doesn't support precompiling assets on Rails 4.
  3. 你打开了资产管道,对吧?在config/application.rb中,您需要第config.assets.enabled = true
  4. 您必须没有public/assets文件夹。 On deployment Heroku decides whether or not to precompile based on whether this folder is present (even if it's empty)
  5. 如果管道已打开并且您没有资产文件夹,则预编译必须失败。

答案 1 :(得分:2)

尝试更改为此。我希望这会对你有所帮助。

在config / environments / production.rb

config.assets.compile = true config.assets.digest = true

答案 2 :(得分:0)

你可能在错误的Heroku堆栈上。在创建使用资产管道的应用程序时,请确保指定stack Cedar。

heroku create -stack cedar

答案 3 :(得分:0)

它不会部署的原因是因为Google字体。将文件移动到application.css,例如:

 *= require_self
 *= require_tree .
 */


@import url(http://fonts.googleapis.com/css?family=Special+Elite);

允许部署应用程序,并使字体能够正常工作。