gpt4 book ai didi

ruby-on-rails - Rails 本地 Assets :precompile - is there an automated way to check for changes?

转载 作者:IT王子 更新时间:2023-10-29 00:42:58 26 4
gpt4 key购买 nike

我在部署期间遇到了 Assets 预编译的问题,所以我选择进行本地预编译并将生成的文件 checkin 我的源代码树。我对这种方法没有任何问题,除了有时我忘记运行预编译任务并在没有预编译 Assets 的情况下发布! :(

我想知道是否有人遇到过某种方法来检查是否发生了任何 Assets 变化?理想情况下,我想在我的 CI 服务器上运行某种检查,如果有未提交的 Assets 更改,则构建失败。

我有几个想法:

  1. 在 CI 服务器上运行 RAILS_ENV=production bundle exec rake assets:precompile 并查看是否有任何输出。 (如果 Assets 是最新的,该命令似乎不会输出任何内容。)但是,该命令的输出似乎以某种方式与其运行的环境相关联,因为在本地运行命令后,提交结果,然后在 CI 服务器上运行命令,仍然有命令的输出!我想知道为什么这与环境有关,但我什至无法在 rails github 存储库中找到 rake assets:precompile 的源代码。有谁知道它的来源在哪里?

  2. 以某种方式编写一个命令,该命令可以查看 git 历史记录并确定自上次预编译以来我的 assets/ 文件夹中是否有任何 Assets 发生了变化。不太确定那将如何工作...

这让我困扰了不止几次,有时当同事提交 Assets 更改时我没有捕捉到它 - 而且这似乎真的是计算机应该能够为人类捕捉到的东西。我想第三种比较合理的选择是让 CI 服务器简单地运行命令,并将生成的文件自动提交到源代码树,但我不喜欢我的 CI 服务器进行提交的想法。

有什么想法吗?谢谢。

最佳答案

您可以在 sprockets-rails 中找到 precompile 任务的源代码.您在本地看不到任何更改的原因可能是由于指纹识别,它在生产中默认启用,而在其他环境中禁用(因为使用指纹进行调试可能很麻烦)。您可以使用 config.assets.digest 启用它,如 assets guide 中所述

如您所述,很容易忘记预编译步骤。一个优雅的自动化是从你的 repo 中删除已编译的 Assets ,并添加一个 capistrano(或 CI)任务来为每个部署预编译 Assets 。预编译最好在 CI 服务器上进行(而不是在每个生产服务器上运行)。这种方法还减少了继续扫描已编译 Assets 以查找更改的需要(您实际上不必关心)。

自动向您的存储库提交任何内容是一个坏主意 - 除了无意的提交之外,您最终会弄乱您的提交历史。

关于ruby-on-rails - Rails 本地 Assets :precompile - is there an automated way to check for changes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28888159/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com