我有一个在本地开发环境中工作的项目,但在上传到Heroku时会中断。在Heroku上访问我的项目时,我注意到我从服务器收到404回复,说它找不到我的css
和js
文件。我做了一些搜索,发现Heroku没有预编译我的资产。该项目将正常工作,直到Heroku让我的项目进入睡眠状态。在Heroku中唤醒项目后,css
和js
被破坏。
该项目正在使用Rails 4.2.4,我确保将config.serve_static_assets = true
包含在我的config/application.rb
和gem 'rails_12factor', group: :production
的Gemfile中。
当Heroku因不活动而让项目进入睡眠状态时,css
和js
才会中断。有没有人知道如何让Heroku在睡眠中唤醒时自动预编译资产?
答案 0 :(得分:1)
之前我遇到过类似的问题,我最好的选择是在本地预编译,然后推送到heroku。按如下方式配置production.rb:
config.serve_static_files = false
config.assets.compile = false
然后在你的控制台预编译中如下:
rake assets:precompile RAILS_ENV=production
这将预编译public/assets
中的所有内容,提交您的更改并推送到heroku。
还要重置资产缓存以避免任何不一致:
rake assets:precompile RAILS_ENV=production
以上操作会在您运行预编译命令时强制重建所有public/assets
目录。
如果您的问题是资产重新编译,我的答案应该解决它,如果您仍有问题,那么您做错了或问题与资产预编译没有任何关系。
我们将上面的配置值设置为false,因为现在您正在将预编译文件发送到repo,因此如果缺少某些内容,我们不提供静态文件或后备资产管道,我们将在本地进行所有操作。
答案 1 :(得分:1)
gem 'rails_12factor', group: :production
默认情况下,Rails 4不会为您的资产提供服务。要启用此功能,您需要进入config / application.rb并添加以下行:
config.serve_static_assets = true
config.serve_static_files = true
config.assets.compile = true
bundle install
bundle exec rake assets:precompile RAILS_ENV=production
确保图像位于/ public文件夹中。