2

我正在使用 Heroku Pipelines 部署我的 Rails 应用程序(它可靠且快速)。

但是,由于资产只预编译一次,因此在部署到登台期间,生产中提升的 CSS 资产都包含对登台 CDN 上的图像和字体的引用。

// Precompiled Source:
background-image: image-url('background.png');
// Compfiled Result:
background-image: url('https://stagingcdn.domain.com/assets/backgroundXXXXXXX.png');

有没有办法将 Rails 配置为输出asset-url() 助手的相对路径,而不是包含asset_hosts 域的绝对路径?

或者某种形式的后期推广阶段,我可以再次运行预编译以进行生产部署?浏览 Herkou 的文档并没有什么建议,除了切换到资产同步 gem,他们在其他地方积极劝阻。

欣赏任何经验或想法。

4

2 回答 2

4

我最近遇到了同样的问题,并通过清除asset_host之前assets:precompile的运行来解决它。

这样https://cdn.mysite.com/assets/cat-abc123.jpg,它不会生成类似的引用,而是生成类似的引用,/assets/cat-abc123.jpg. 当您通过 访问样式表时https://cdn.mysite.com,绝对路径将相对于 CDN 进行解析,无论它是您的暂存路径还是生产路径。

我实现了这一点,在调用后将以下内容放入我的 Rakefileload_tasks中:

task :clear_asset_host do
  Rails.configuration.action_controller.asset_host = nil
end

Rake::Task["assets:precompile"].enhance [:clear_asset_host]
于 2019-10-02T14:22:40.367 回答
-1

您可以通过执行以下操作在生产应用程序上再次预编译:

heroku run RAILS_ENV=production bundle exec rake assets:clobber- 清除“公共”文件夹中现有的编译值/名称。

heroku run RAILS_ENV=production bundle exec rake assets:precompile- 再次编译所有内容。

每次向 Heroku 服务器提交新资产时,您很可能需要这样做。

但是,如果您通过生产应用程序的“公共”文件夹中的资产名称导航到资产,则不应在本地计算机(开发)上运行这些资产。当您在生产机器上再次编译它们时,它将更改它们的“公共”名称。

于 2019-09-03T01:26:46.470 回答