Ruby on Rails资产没有在Heroku上进行预编译
我有一个在本地开发环境中工作的项目,但在上传到Heroku时会中断。 在Heroku上访问我的项目时,我注意到我收到来自服务器的404响应,说它无法找到我的css
和js
文件。 我做了一些搜索,发现Heroku没有预编译我的资产。 该项目将正常工作,直到Heroku让我的项目进入睡眠状态。 在Heroku中唤醒项目后, css
和js
被破坏了。
该项目使用的是Rails 4.2.4,我确保在我的config/application.rb
包含config.serve_static_assets = true
在我gem 'rails_12factor', group: :production
production。
当Heroku由于不活动而使项目进入睡眠状态时, css
和js
才会中断。 有没有人知道如何让Heroku在睡眠中唤醒时自动预编译资产?
我之前遇到过类似的问题,我最好的选择是在本地预编译,然后推送到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,因此如果缺少某些内容,我们不提供静态文件或后备资产管道,我们将在本地进行所有操作。
的Gemfile
gem 'rails_12factor', group: :production
application.rb中
默认情况下,Rails 4不会为您的资产提供服务。 要启用此function,您需要进入config / application.rb并添加以下行:
config.serve_static_assets = true
production.rb
config.serve_static_files = true config.assets.compile = true
命令行
bundle install bundle exec rake assets:precompile RAILS_ENV=production
确保图像位于/ public文件夹中。
参考这里