我最近尝试将我的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.13
到4.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并删除config.whiny_nils以删除弃用警告。
更改confirm()的语法以删除弃用警告
将哈希火箭的哈希语法更改为1.9.3语法
删除自动解释配置以删除弃用警告
使用rake rails添加bin目录:update:bin
添加rails_12factor
gem以便能够托管到heroku
在Gemfile中为heroku添加ruby版本
编辑2
我想还值得一提的是,Heroku在预编译期间没有任何错误,它实际上说它在预编译资产方面是成功的,这就是为什么它不起作用的奇怪之处。
答案 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
行。这解决了我的问题。