Heroku 上的 Rails 3.2 资产编译问题
Posted
技术标签:
【中文标题】Heroku 上的 Rails 3.2 资产编译问题【英文标题】:Rails 3.2 asset compilation issues on Heroku 【发布时间】:2013-07-26 16:08:45 【问题描述】:似乎很多人都有类似的问题。我咨询了这个thread、this和this article等等。我发现了很多关于这些问题的主题,但发布的解决方案一直无法找到明确的解决方案。我目前正在使用 ruby 1.9.2 和 Heroku stack cedar 运行 rails 3.2.8。
我有两个主要的相关问题:
1) 我的项目正在将一些资产(不是全部)推送到 heroku。
根据其他线程中的建议,当我放置时:
config.assets.initialize_on_precompile = false
在我的 /config/application.rb 中,
config.serve_static_assets = true
config.assets.precompile += %w( *.js )
在 /config/environments/production.rb 中,和
gem 'rails_12factor', group: :production
在我的 gemfile 中,推送会成功预编译,但是 Heroku 上的 application.js 文件是空的:
2) 推送成功前预编译将 JS 放到 Heroku 上,但不再识别。
删除后
config.assets.precompile += %w( *.js )
来自 /config/production.rb,并运行
RAILS_ENV=production bundle exec rake assets:precompile
使用 index.html.erb 提交和推送结果尽管 application.js 存在且非空,但无法识别 JS,如下所示:
我觉得好像我尝试了这些解决方案的所有组合都无济于事。我还没有将应用程序更新到 Rails 4,现在这样做是个好主意吗?
还有什么其他建议可以从这里开始吗?
奇怪的是,在我的另一个 Rails 3.2 应用程序中,我只在第一次访问时遇到类似的错误
页面加载后,只需点击刷新即可加载所有内容,错误就会消失。此应用在其代码库中没有上述尝试过的解决方案。
【问题讨论】:
【参考方案1】:我遇到了同样的问题,为我解决的方法是在 gemfile 中指定我的 ruby 版本。
ruby '1.9.3'
【讨论】:
【参考方案2】:没有答案,但这可能会有所帮助。我使用下面的选项进行预编译,这意味着只创建了 MD5 版本,这帮助我解决了一些问题。
rake -v --trace assets:precompile:primary RAILS_ENV=production
我也总是在预编译之前这样做:
rake assets:clean
此外,请仔细检查 html 中的确切 MD5 名称和 heroku 中的文件名。
【讨论】:
【参考方案3】:同样的事情发生在我身上。当我将 Rails 版本从 3.2.8 更新到 3.2.11 时,它成功了!
【讨论】:
自从那篇帖子之后,我再也没有遇到过错误。我认为这是上述步骤的组合,包括升级到 rails 4。在 production.rb 中添加“config.serve_static_assets = true”似乎也有帮助。谢谢!以上是关于Heroku 上的 Rails 3.2 资产编译问题的主要内容,如果未能解决你的问题,请参考以下文章
是否可以跳过 Heroku 上的单个 git push 的资产预编译步骤?
如何通过 https 和 heroku 上的 rails 服务云端资产?