请帮我理解什么heroku run rake assets:precompile
确实如此。自从我开始在 ruby on Rails 上工作以来,我总是会在推送到 github 和 heroku 之前运行这三个命令:
bundle exec rake assets:precompile
RAILS_ENV=production bundle exec rake assets:precompile
当我推送到heroku后,我会运行:
heroku run rake assets:precompile
然而,当我在上次推送到 heroku 后尝试运行它时,我在不同的文件上遇到了一堆相同的错误。例如:
Warning. Error encountered while saving cache ... can't dump anonymous class ...
为了看看我是否可以解决这个问题,我跑了
heroku run rake assets:clean
进而heroku run rake assets:precompile
再次。问题是一切都工作正常,但我只是对所有这些警告/错误感到怀疑。请帮助我理解。谢谢你!
预编译
给你一些更清晰的定义 -Heroku
并不是唯一需要您“预编译”资产的系统。资产预编译是大多数 Rails 生产环境的先决条件,因为它允许您提供静态资产(文件)——非常适合速度和效率
这是什么Rails 文档对此说道:
在生产环境中Sprockets使用指纹识别方案
如上所述。默认情况下,Rails 假定资源已预编译
并将由您的网络服务器作为静态资产提供服务。
在预编译阶段,根据内容生成 MD5
编译后的文件,并按原样插入到文件名中
写入光盘。这些指纹名称由 Rails 使用
助手代替清单名称。
Heroku 希望您预编译资产的原因是 Heroku 环境是为了速度和效率而设计的;因此不希望花费 CPU 资源来编译应用程序的每个请求/实例的资产
这意味着您必须自己预编译资产,或者让Heroku 构建包为你解决这个问题
Heroku
正如所提到的CWitty
,您需要确保在本地编译您的资产。虽然我不确定您收到的错误,但我确实知道一件事:预编译填充public/assets
folder
这意味着如果您在本地预编译before提交到 Heroku,您的所有最新资产都会出现在您的public/assets
目录before您尝试在 Heroku 上运行该应用程序
尽管 Heroku 确实在构建过程中执行预编译,但通过本地预编译会更安全(从异常角度来看):
$ rake assets:precompile RAILS_ENV=production
这将使您能够填充public/assets
文件夹,让您可以毫无问题地推送到 Heroku
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)