为什么 Heroku 在预编译后要清理资产?

问题描述 投票:0回答:2

我是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中吗?

部署前必须在本地运行预编译吗?每次?

ruby-on-rails heroku asset-pipeline
2个回答
0
投票

配置/生产.rb

config.assets.compile = true

运行以下命令:

RAILS_ENV=production rake assets:precompile

然后将所有文件和清单文件推送到heroku。


0
投票

所以,我在 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。 仍在调查中...

© www.soinside.com 2019 - 2024. All rights reserved.