Heroku在Rails 4中的资产管道问题-空资产
我做了一切: 档案:Heroku在Rails 4中的资产管道问题-空资产,heroku,asset-pipeline,ruby-on-rails-4,Heroku,Asset Pipeline,Ruby On Rails 4,我做了一切: 档案: gem 'rails_12factor', group: :production config/environments/production.rb config.serve_static_assets = true config/application.rb config.assets.precompile += %w( *.css *.js ) # config/application.rb config.assets.paths << Rails.
gem 'rails_12factor', group: :production
config/environments/production.rb
config.serve_static_assets = true
config/application.rb
config.assets.precompile += %w( *.css *.js )
# config/application.rb
config.assets.paths << Rails.root.join('vendor', 'assets')
我的js和css文件位于vendor/assets/下。当我部署到heroku时,一切看起来都很好:
Running: rake assets:precompile
Asset precompilation completed (310.44s)
当我看到application-5c84e59d83c00fd13fb659edc18db24a.js和application-CB9661F4981AA5C8D103E83EE8747B2.css时,它们是空的
我做错了什么
我读过:
这不是“真正的”解决方案,但Heroku将在运行时编译资产。看
当然,默认情况下,在生产环境中,视图会使用摘要呈现通过帮助程序生成的任何资产路径(例如,图像标签()或样式表链接标签(),或SASS中的资产路径(),等等),这通常会获取适当的预编译文件
但这是坏的,所以您可以关闭它,让rails在运行时编译资产。这显然是低性能的,但如果你的唯一目标是让你的网站立即工作,这应该是可行的
在production.rb中
:
config.assets.digest = false
然后你的样式表链接应该解析为像/assets/application.css这样的东西,它应该可以工作(在我的应用程序中)。但是,这并不是真正的解决方案,而是一种变通办法。如果你能找出真正的根本原因,请告诉我 我相信我找到了根本原因。我选择把它作为一个新的答案发布,因为它与我上面发布的工作是分开的 我构建并部署了一个空的新rails 4应用程序(这很有效)。通过区分
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应用程序中被注释掉。Heroku医生建议:
config.action_dispatch.x_sendfile_header = nil # For Heroku
当我改变这一点时,一切都如期进行。您可以通过显式地将以下内容添加到application.rb来解决这个问题
config.assets.precompile += %w( *.css *.js )
# config/application.rb
config.assets.paths << Rails.root.join('vendor', 'assets')
#config/application.rb
config.assets.path