Ruby on Rails资产没有在Heroku上进行预编译

我有一个在本地开发环境中工作的项目,但在上传到Heroku时会中断。 在Heroku上访问我的项目时,我注意到我收到来自服务器的404响应,说它无法找到我的cssjs文件。 我做了一些搜索,发现Heroku没有预编译我的资产。 该项目将正常工作,直到Heroku让我的项目进入睡眠状态。 在Heroku中唤醒项目后, cssjs被破坏了。

该项目使用的是Rails 4.2.4,我确保在我的config/application.rb包含config.serve_static_assets = true在我gem 'rails_12factor', group: :production production。

当Heroku由于不活动而使项目进入睡眠状态时, cssjs才会中断。 有没有人知道如何让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文件夹中。

参考这里