Mar*_* G. 13 git continuous-integration ruby-on-rails sprockets
我在部署期间遇到了资产预编译的问题,因此我选择进行本地预编译并将生成的文件签入到源代码树中.我对这种方法没有任何问题,除非有时我忘记运行预编译任务并在不预编译资产的情况下发布!:(
我想知道是否有人通过某种方式检查是否发生了任何资产变更?理想情况下,我想在我的CI服务器上运行某种检查,如果没有提交资产更改,则无法进行构建.
我有几个想法:
RAILS_ENV=production bundle exec rake assets:precompile在CI服务器上运行,看看是否有任何输出.(如果资产是最新的,该命令似乎不输出任何内容.)但是,似乎命令的输出以某种方式与其运行的环境相关联,因为在本地运行命令后,提交结果,然后在CI服务器上运行命令,命令仍然有输出!我想知道为什么这与环境有关,但我甚至找不到rake assets:precompilerails github repo中的源代码.有谁知道它的来源在哪里?
以某种方式编写一个命令,可以查看git历史记录,并确定assets/自上次预编译以来我的文件夹中是否有任何资产发生了变化.不确定这将如何工作......
这让我有点不止一次,有时候当同事进行资产变更时,我并没有抓住它 - 而且看起来这似乎是计算机应该能够为人类捕获的东西.我想一个有点合理的第三种选择是让CI服务器只运行命令,并自动将生成的文件提交到源树,但我不喜欢我的CI服务器提交提交的想法.
有什么想法吗?谢谢.
您可以precompile在sprockets-rails中找到该任务的源代码.你没有在本地看到任何变化的原因可能是由于指纹识别,在生产中默认启用,在其他环境中禁用(因为指纹调试可能很麻烦).您可以使用资产指南config.assets.digest中的说明启用它
正如您所提到的,很容易忘记预编译步骤.优雅的自动化是从您的仓库中删除已编译的资产,并添加capistrano(或CI)任务以在每次部署时预编译资产.理想情况下,预编译将在CI服务器上进行(而不是在每个生产服务器上运行).这种方法还减少了继续扫描编译资产以进行更改的需要(您实际上不应该关心这些更改).
自动向您的仓库提交任何内容是一个坏主意 - 除了无意中提交之外,您最终还是会将您的提交历史记录卷入其中.