未提供Rails Openshift热部署资产



我在Openshift上部署了一个Rails应用程序。我为热部署添加了标记,热部署本身运行良好,但在应用程序热部署期间,不会提供css和js文件。当热部署结束时,这些文件将再次正常工作。我还在这个应用程序中使用Bootstrap和Sass(gem‘Bootstrap-Sass’)。你知道为什么会发生这种事吗?

Apache通过Passenger模块为这些文件提供服务。这些文件被"就地"替换,这导致它们被删除/重建,这导致在这段时间内无法提供服务,而且由于它们是静态资产,因此不会存储在内存中。不幸的是,目前还没有办法让热部署完全与Rails一起工作,以在部署时保持网站100%的工作状态。

一个解决方案是将您的资产放在一个单独的运行项目中,因为没有简单的方法可以让它们始终可用,正如@developercore所解释的那样。。

这可能不是最好的解决方案,但它将是一个简单的补丁解决方案,不会与某个特定的托管平台紧密耦合。

我修复了这个问题,现在可以工作了。我会解释我做了什么,也许这会对某人有所帮助。

基本上,需要在本地预编译您的资产,并提交和推送它们。这是由
rake assets完成的:预编译RAILS_ENV=生产

但有一个陷阱!!!本地预编译的资产与Openshift上生成的资产不匹配。这怎么可能?Openshift上有一个错误,即资产是在生产时生成的,RAILS_ENV=开发:/更多信息请点击此处:
https://github.com/openshift/origin-community-cartridges/issues/8
因此需要在应用程序中添加环境变量:
rhc set env RAILS_env=生产-应用程序名称
则生成的资产匹配。

因此,在修复它之后,当对资产进行更改时,我们需要再次预编译它们。为了使它们在热部署期间工作,需要在回购中同时拥有旧的预编译资产和新的预编译的资产。例如:如果您有旧文件:
应用程序-10770925dc8abd4ceab34119af4032163cc5a94f3523d60d321f33a999171d58.css
和新的预编译文件:
应用程序-82f6fca7056cbda52cb32086051f031b880e2630a137f0e41e96cb2ee923ee.css
它们都必须在存储库中。在热部署期间,旧资产仍然被引用,所以它必须在存储库中。热部署结束后,将引用新资产。在下一次提交和推送中,旧资产可能会被删除

所以基本上这个问题对我来说已经解决了,现在热部署工作正常。

最新更新