在推送到heroku之后,我的大多数资产突然返回404
我已经部署了这个应用程序(rails 3.2.11)一百万次了,我没有搞乱任何设置,但现在我受到了欢迎:
为什么这发生在蓝色之外? 我的application.rb包括config.assets.enabled = true
– 从来没有任何问题。
事实上,在端口3000上本地运行它似乎没有任何问题。
在今天早上部署到heroku之后,它似乎没有加载内部/ assets /
有趣的是,在复制文件以尝试并创建一个新应用程序后, git commit
产生您期望的所有内容,以及我认为可能与之相关的LONG列表:
编辑:有趣的是,一些资产已经加载,如徽标和背景,但其余的,你可以看到返回404。
今天我在heroku上使用rails 4遇到了这个问题。 @Jeff提供的文章有点旧, 但gem存储库有一个很好的自述文件。 总而言之,您需要为Gemfile添加两个gem:
-
gem 'rails_serve_static_assets'
(它将解决静态资产问题)和 -
gem 'rails_stdout_logging'
(前一个依赖于它)。
把行放在config / environments / production.rb中
config.assets.compile = true
它可以在运行时编译资产,就像在开发环境中一样,但是它使应用程序变慢,最好的方法是在生产环境中使用rake任务在本地编译资产(RAILS_ENV =生产包exec rake资产:预编译)并在公共/资产中提交生成的资产,然后进行部署。 或者,heroku运行rake资产:预编译
Heroku发布了一个gem来处理资产,而无需关闭编译或手动编译。
https://devcenter.heroku.com/articles/ruby-support#static-assets
只需将其添加到您的Gemfile并重新部署即可。
gem 'rails_serve_static_assets', group: [:production]
对于Rails 4,使用:
config.serve_static_assets = true
默认值为false。 删除rails_12factor gem后我们需要这个。
Rails建议默认情况下应禁用此设置config.serve_static_assets
,即设置为false。 以下是rails app中生成的config/environments/production.rb
的默认配置
禁用Rails的静态资产服务器(Apache或nginx已经这样做了)
config.serve_static_assets = false
因此,如果您在本地应用程序中将其设置为true,那么这仍然很好。 但是,如果您在Apache或ngix或heroku以外的任何其他设备上部署应用程序,则不建议在您的production.rb配置文件中生成config.serve_static_assets=true
。 以下是Rails指南中的文档。
config.serve_static_files配置Rails本身以提供静态文件。 默认为true,但在生产环境中关闭,因为用于运行应用程序的服务器软件(例如NGINX或Apache)应该为静态资产提供服务。 与默认设置不同,在运行时(绝对不推荐!)或使用WEBrick在生产模式下测试应用程序时将此设置为true。 否则,您将无法使用页面缓存,并且对公共目录下经常存在的文件的请求将无论如何都会打到您的Rails应用程序。
要使用每个文件的相应指纹加载资源,请validation配置config/environments/production.rb
是否具有以下指令:
ruby # Load assets with fingerprint behavior config.assets.digest = true