Heroku在Rails 4 - 空资产中发布资产管道

时间:2013-07-12 21:22:03

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

我已经做了一切:

的Gemfile:

gem 'rails_12factor', group: :production

配置/环境/ production.rb

config.serve_static_assets = true

配置/ application.rb中

config.assets.precompile += %w( *.css *.js )

我在vendor / assets /下有我的js和css文件。当我部署到heroku时,一切看起来都很好:

Running: rake assets:precompile
Asset precompilation completed (310.44s)

当我看到application-5c84e59d83c00fd13fb659edc18db24a.js和application-cb9661f49811aa5c8d103e83ee8747b2.css时,它们是空的

我做错了什么?

我读过:

Heroku does NOT compile files under assets pipelines in Rails 4

Tried several fixes: Heroku/Rails 4 Assets Precompile Error

3 个答案:

答案 0 :(得分:1)

我相信我找到了根本原因的问题。我选择将其作为新答案发布,因为它与我在上面发布的解决方案分开。

我构建并部署了一个空的新rails 4 app(这很有效)。通过区分production.rb文件,我注意到非工作应用程序中有这样的行:

# Specifies the header that your server uses for sending files
# (comment out if your front-end server doesn't support this)
config.action_dispatch.x_sendfile_header = "X-Sendfile" # Use 'X-Accel-Redirect' for nginx

此配置行已在新的rails 4 app中注释掉。 Heroku文档推荐这个:

config.action_dispatch.x_sendfile_header = nil # For Heroku

当我改变这一点时,一切都按预期工作。

答案 1 :(得分:0)

这不是“真正的”解决方案,但Heroku将在运行时编译资产。请参阅this guide

当然,默认情况下,在生产中,您的视图会使用摘要呈现通过帮助程序生成的任何asset_path(例如,在SASS中的image_tag()或styleheet_link_tag()或asset_path()等),这通常会获取适当的预编译文件。

但这已经破了,所以你可以关闭它,让rails在运行时编译资产。这显然要低得多,但如果您的唯一目标是让您的网站立即正常运行,那么这应该可行。

production.rb

  config.assets.digest = false

然后你的样式表链接应解析为类似/assets/application.css的东西,它应该可以工作(它在我的应用程序中完成)。但是,同样,这不是真正的解决方案,而是一种解决方法。如果您对实际的根本原因有任何牵引力,请告诉我。

答案 2 :(得分:0)

您可以通过将以下内容显式添加到application.rb

来解决此问题
# config/application.rb

config.assets.paths << Rails.root.join('vendor', 'assets')

似乎虽然Rails确切知道它想要什么,但Heroku需要提醒将assets文件夹包含在资产路径中。