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

时间:2016-02-18 00:25:18

标签: ruby-on-rails heroku asset-pipeline

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

该项目正在使用Rails 4.2.4,我确保将config.serve_static_assets = true包含在我的config/application.rbgem 'rails_12factor', group: :production的Gemfile中。

当Heroku因不活动而让项目进入睡眠状态时,cssjs才会中断。有没有人知道如何让Heroku在睡眠中唤醒时自动预编译资产?

2 个答案:

答案 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)

的Gemfile

gem 'rails_12factor', group: :production 

application.rb中

默认情况下,Rails 4不会为您的资产提供服务。要启用此功能,您需要进入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文件夹中。

Reference here