首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails本地资产:预编译-是否有自动检查更改的方法?

Rails本地资产:预编译-是否有自动检查更改的方法?
EN

Stack Overflow用户
提问于 2015-03-05 21:32:44
回答 4查看 4.3K关注 0票数 14

在部署期间,我遇到了资产预编译的问题,所以我选择了本地预编译,并将生成的文件签入到我的源树中。我对这种方法没有任何问题,除了,有时我忘记运行预编译任务和发布而不预编译资产!:(

我想知道是否有人遇到过某种方式来检查是否发生了任何资产变化?理想情况下,我希望在我的CI服务器上运行某种类型的检查,如果还没有提交资产更改,就会失败构建。

我有几个想法:

  1. 在CI服务器上运行RAILS_ENV=production bundle exec rake assets:precompile并查看是否有任何输出。(如果资产是最新的,则该命令似乎不会输出任何内容。)但是,似乎命令的输出与它运行的环境有某种联系,因为在本地运行命令、提交结果、然后在CI服务器上运行命令之后,仍然有来自命令的输出!我想知道为什么这与环境有关,但我甚至无法在rails github中找到rake assets:precompile的源代码。有人知道来源在哪里吗?
  2. 以某种方式编写一个命令,该命令可以查看git历史记录,并确定自上次预编译以来,是否有任何资产在我的assets/文件夹中发生了更改。不太确定那是怎么回事..。

这已经咬了我好几次了,有时候当同事们进行资产变更时,我就抓不到了--而且这看起来真的是一台电脑应该能捕捉到的东西。我想第三个比较合理的选择是让CI服务器简单地运行命令,并将生成的文件自动提交到源树,但我不喜欢CI服务器提交提交的想法。

有什么想法吗?谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-07-22 10:36:57

您可以在precompile中找到链轮.导轨任务的源。您没有在本地看到任何更改的原因可能是由于指纹,在生产中默认启用指纹,在其他环境中禁用(因为使用指纹进行调试可能会带来麻烦)。您可以使用config.assets.digest启用它,如资产指南中所述。

正如您提到的,很容易忘记预编译步骤。一个优雅的自动化将是从您的回购中删除已编译的资产,并在每个部署中添加一个capistrano (或CI)任务来预编译资产。理想情况下,预编译将发生在CI服务器上(而不是在每个生产服务器上运行它)。这种方法还减轻了继续扫描编译后的资产以获得更改的需要(这是您不应该关心的)。

自动提交任何东西给你的回购是个坏主意--除了不经意的提交,你最终会让你的提交历史变得复杂。

票数 8
EN

Stack Overflow用户

发布于 2015-07-20 01:38:14

我的答案是基于Git的,OP思想2的一个实现:我们能不能失败基于Git元数据的构建-我们的assets/源比assets-precompile/当前签入的新版本。答案可能会根据签出环境中的条件或者Rails构建的一些知识而得到改进。

  1. git log -1 --format=%ct -- assets/将为您提供最新源提交的时间戳。
  2. git log -1 --format=%ct -- assets-precompile/将为您提供最新预编译签入的时间戳。

在构建的早期添加一个条件,对这两个数字进行比较,如果1>=2,则任何发布版本都会失败。实际上,您可能希望在那里构建一个宽限期,万一有人在签出和运行预编译时以及在提交时插入提交,则需要在两者之间进行构建。

或者,为了对此进行更严格的处理,您可以将{资产/}的提交散列存储在一个文件中,如果它更改并与上次预编译时不同,则再次失败任何发行版构建,直到它再次预编译并签入:

代码语言:javascript
运行
复制
git log --format=%H -- assets/

..。并将其与您更新的提交哈希与预提交进行比较。您还可以为树哈希而不是提交哈希使用%T,这可能简化分支。

票数 3
EN

Stack Overflow用户

发布于 2015-06-13 18:20:59

我正在经历同样的努力,但我仍未能解决这个问题。第一步是使用git预提交钩子编译资产(只有在有修改的资产时才会做一些事情)。

http://jimneath.org/2012/05/05/precompile-assets-using-a-git-hook.html

编辑:看起来这个链接被核弹了,这是存档版本:https://web.archive.org/web/20161022195654/http://jimneath.org/2012/05/05/precompile-assets-using-a-git-hook.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28888159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档