在推送到heroku之后,我的大多数资产突然返回404

dsp*_*099 18 ruby deployment ruby-on-rails heroku asset-pipeline

我已经部署了这个应用程序(rails 3.2.11)一百万次了,我没有搞乱任何设置,但现在我受到了欢迎:

在此输入图像描述

为什么这个发生了?我的应用程序.rb包括config.assets.enabled = true- 从来没有任何问题.

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

在今天早上部署到heroku后,似乎它没有加载内部/ assets /

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

在此输入图像描述

编辑:有趣的是,一些资产已加载,如徽标和背景,但其余部分,您可以看到返回404.

Sac*_*ngh 15

把行放在config/environments/production.rb中

config.assets.compile = true
Run Code Online (Sandbox Code Playgroud)

它起作用,因为它将在运行时编译资产,就像在开发环境中一样,但它使应用程序变慢,最好的方法是使用rake任务在生产环境中本地编译资产(RAILS_ENV =生产包exec rake资产:预编译)并在公共/资产中提交生成的资产,然后进行部署.或者,heroku运行rake资产:预编译

  • 这不是一个好的答案.手动编译资产并不等同于提供预编译资产. (7认同)
  • 它起作用,因为它将在运行时编译资产,就像在开发环境中一样,但它使应用程序变慢,最好的方法是使用rake任务在生产环境中本地编译资产(RAILS_ENV =生产包exec rake资产:预编译)并在公共/资产中提交生成的资产,然后进行部署.或者,heroku运行rake资产:预编译 (2认同)

Alf*_*nti 9

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

  1. gem 'rails_serve_static_assets' (它将解决静态资产问题)和
  2. gem 'rails_stdout_logging' (前一个依赖).


Jef*_*eff 6

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

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

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

gem 'rails_serve_static_assets', group: [:production]
Run Code Online (Sandbox Code Playgroud)