Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Heroku在Rails 4中的资产管道问题-空资产_Heroku_Asset Pipeline_Ruby On Rails 4 - Fatal编程技术网

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