尽管安装了rails_12factor gem,但Rails 4资产仍然无法在Heroku中预编译

时间:2013-07-04 23:55:45

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

我最近尝试将我的Rails 3.2.13应用程序升级到新发布的4.0.0,并尝试将其部署到Heroku。不幸的是,尽管遵循this guide,资产似乎仍然没有正确预编译。当然,我已经添加了rails_12factor gem,我还做了一些事情来将应用程序正确升级到4.0.0。它在开发模式下非常好用,我的所有测试都还在通过。但是,它仍然不会在Heroku中显示资产。

我在运行heroku run ls public/assets时注意到的一件事是,Heroku实际上能够从app/assets预编译资产,并对这些文件执行cat命令将显示资产的编译版本。但是,如果我在浏览器上访问该文件,我总是得到404。

Heroku实际上是否准备好使用Rails 4?

修改

以下列出了我从3.2.13升级到4的所做的事情:

  • 已删除资产组,因为Rails 4中不再使用该资产组

  • 更新从3.2.134.0.0

    的导轨版本
  • 从application.rb中删除active_resource/railties的必需行,因为active_resource已作为rails的依赖项被删除

  • 更新sass-rails和coffee-rails以使用相应的主分支,因为它使用railties 4.0.0.rc2而不是4.0.0作为依赖

  • 将设计版本更新为3.0.0.rc

  • 添加protected_attributes以简化向Rails 4的过渡,而无需切换到strong_parameters

  • 更改环境配置以添加config.eagerload并删除co​​nfig.whiny_nils以删除弃用警告。

  • 更改confirm()的语法以删除弃用警告

  • 将哈希火箭的哈希语法更改为1.9.3语法

  • 删除自动解释配置以删除弃用警告

  • 使用rake rails添加bin目录:update:bin

  • 添加rails_12factor gem以便能够托管到heroku

  • 在Gemfile中为heroku添加ruby版本

编辑2

我想还值得一提的是,Heroku在预编译期间没有任何错误,它实际上说它在预编译资产方面是成功的,这就是为什么它不起作用的奇怪之处。

4 个答案:

答案 0 :(得分:1)

尝试将Gemfile中assets组的所有gem移动到主范围。 Rails 4中不再使用资产组,这可能会导致问题。

答案 1 :(得分:0)

使用较少的版本为我工作

gem 'twitter-bootstrap-rails', '= 2.2.6'
gem 'less-rails', '2.3.3'

答案 2 :(得分:0)

我遇到了同样的问题。我现在在本地预编译它们

bundle exec rake assets:precompile RAILS_ENV=production

并将它们添加到存储库并将它们推送到heroku。

答案 3 :(得分:-2)

在您的production.rb文件中,请确保您拥有第config.assets.compile = true行。这解决了我的问题。