在推送到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:

  1. gem 'rails_serve_static_assets' (它将解决静态资产问题)和
  2. 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应用程序。

URL – http://guides.rubyonrails.org/configuring.html

要使用每个文件的相应指纹加载资源,请validation配置config/environments/production.rb是否具有以下指令:

ruby # Load assets with fingerprint behavior config.assets.digest = true