18

我已经部署了这个应用程序(rails 3.2.11)一百万次,我没有弄乱任何设置,但现在我收到了这样的问候:

在此处输入图像描述

为什么会突然发生这种情况?我的 application.rb 内容包括config.assets.enabled = true- 从来没有任何问题。

事实上,在端口 3000 上本地运行它似乎没有任何问题。

今天早上部署到 heroku 后,它似乎没有加载 /assets/ 中的任何内容

有趣的是,在复制文件并尝试制作一个新应用程序后,git commit会产生您期望的所有内容以及我认为可能相关的长长列表:

在此处输入图像描述

编辑:有趣的是,已经加载了一些资产,例如徽标和背景,但其余部分如您所见返回 404。

4

6 回答 6

15

将行放入 config/environments/production.rb

config.assets.compile = true

它可以在运行时编译资产,就像在开发环境中一样,但它会使应用程序变慢,最好的方法是在生产环境中使用 rake 任务本地编译资产(RAILS_ENV=production bundle exec rake assets:precompile)并在 public/assets 中提交您生成的资产,然后进行部署。或者,heroku 运行 rake assets:precompile

于 2013-05-21T13:44:28.553 回答
9

今天我在heroku上使用rails 4遇到了这个问题。@Jeff 提供的文章有点旧,但是gem 存储库有一个很好的自述文件。总而言之,您需要在 Gemfile 中添加两个 gem:

  1. gem 'rails_serve_static_assets'(它将解决静态资产问题)和
  2. gem 'rails_stdout_logging'(前一个取决于)。
于 2014-08-12T18:46:38.380 回答
6

Heroku 发布了一个 gem 来处理资产,而无需关闭编译或手动编译。

https://devcenter.heroku.com/articles/ruby-support#static-assets

只需将其添加到您的 Gemfile 并重新部署即可。

gem 'rails_serve_static_assets', group: [:production]
于 2013-12-31T20:19:56.253 回答
3

对于 Rails 4,使用:

config.serve_static_assets = true

默认值为假。我们在移除 rails_12factor gem 后需要这个。

于 2014-10-23T22:10:35.530 回答
2

Rails 建议config.serve_static_assets默认禁用此设置,即设置为 false。config/environments/production.rb这是在 rails app中生成的默认配置

禁用 Rails 的静态资产服务器(Apache 或 nginx 已经这样做了)

config.serve_static_assets = false

因此,如果您在本地应用程序中将其设置为 true,那仍然可以。但是,如果您在 Apache 或 ngix 或 heroku 以外的任何其他设备上部署您的应用程序,那么不建议config.serve_static_assets=true在您的 production.rb 配置文件中进行制作。这是来自 Rails 指南的文档。

config.serve_static_files 将 Rails 本身配置为提供静态文件。默认为 true,但在生产环境中被关闭,因为用于运行应用程序的服务器软件(例如 NGINX 或 Apache)应该提供静态资产。与默认设置不同,在运行(绝对不推荐!)或使用 WEBrick 在生产模式下测试您的应用程序时将其设置为 true。否则,您将无法使用页面缓存,并且对公共目录下定期存在的文件的请求无论如何都会影响您的 Rails 应用程序。

网址 - http://guides.rubyonrails.org/configuring.html

于 2015-05-12T19:00:20.183 回答
0

To make the assets to load with the corresponding fingerprint of each file verify the configuration config/environments/production.rb has the instruction:

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

于 2017-05-26T17:39:35.973 回答