我是Rails新手。当我将应用程序部署到heroku时,终端显示以下信息:
remote: -----> Detecting rake tasks
remote: -----> Preparing app for Rails asset pipeline
remote: Running: rake assets:precompile
remote: I, [2017-05-10T05:03:15.348460 #1268] INFO -- : Writing /tmp/build_6d070dbb68ed231a9980e7d6aee4630f/public/assets/fore- 1ea7b4ae84fb4d285d3da11143e3367c41cf15e8e44b9dba475b4b572fc7ae74.png
remote: I, [2017-05-10T05:03:15.370482 #1268] INFO -- : Writing /tmp/build_6d070dbb68ed231a9980e7d6aee4630f/public/assets/subdirectory/image-B-f3b8e56853071297fbe1da778049948f40f87756705420a97a157e9cf8a477be.jpg
...
remote: Asset precompilation completed (12.71s)
remote: Cleaning assets
remote: Running: rake assets:clean
我们看到app/assets/已经被预编译了,包括图片和子目录。但是当我在heroku上打开网站时,app/assets/下的所有图像都失败了。
为了解决这个问题,我运行了
RAILS_ENV=production rake assets:precompile
,签入 git,再次推送。然后图像显示了正确的方式。
我的问题是:
为什么rails在资源预编译完成后会清理资源(见资料末尾)。我没有更改任何默认配置。这种情况只发生在heroku中吗?
部署前必须在本地运行预编译吗?每次?
config.assets.compile = true
运行以下命令:
RAILS_ENV=production rake assets:precompile
然后将所有文件和清单文件推送到heroku。
所以,我在 Heroku 上遇到了完全相同的问题,并且我现在已经解决了这个问题 - 在打开我的应用程序进行流量之前,这很好。 然而,奇怪的是,在 Heroku 的 Production 中,rake assets:precompile 在 rake assets:clean (删除已编译的资产)之前运行。 我似乎无法弄清楚该行为的编码位置(我希望它位于 Procfile 或其他东西中)。
我通过在环境/生产.rb 文件中将 config.assets.compile = true 和 config.serve_static_assets 设置为 true 来解决这个问题。 即使预编译资源丢失(被 Heroku 的时髦构建过程删除),这似乎也会加载所有内容。
似乎 config/environments/Production.rb 中的“默认”配置是禁用此行为,并且仅使用预编译资产(实际上,这对我来说似乎很明智)。 所以我希望找到并解决真正的问题,即 rake assets:clean -after- the rake:assets:precompile。 仍在调查中...