未提供的Rails Openshift热部署资产

时间:2016-05-05 17:09:55

标签: ruby-on-rails ruby openshift assets hotdeploy

我在Openshift上部署了一个Rails应用程序。我为热去除添加了标记,热部署本身工作正常,但在应用程序热备份期间,不提供css和js文件。热部署结束时,这些文件再次正常工作。我也在这个应用程序中使用Bootstrap和Sass(gem'bootstrap-sass')。你知道为什么会这样吗?

3 个答案:

答案 0 :(得分:0)

Apache通过Passenger模块提供文件。文件正在“就地”替换,导致它们被删除/重建,导致它们在那段时间内不被提供,并且因为它们是静态资产,所以它们不存储在内存中。遗憾的是,目前无法使用Rails完全热部署,以便在部署时保持网站100%正常工作。

答案 1 :(得分:0)

一个解决方案是将您的资产放在一个单独的运行项目中,因为@developercorey解释说,没有简单的方法可以随时使用它们。

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

答案 2 :(得分:0)

我解决了这个问题,它现在有效。我将解释我做了什么,也许它会对某人有所帮助。

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

但是有一个问题!本地预编译的资产与Openshift上生成的资产不匹配。这怎么可能?在Openshift上有一个错误,资产是在RAILS_ENV =开发生产时生成的:/更多信息在这里:
https://github.com/openshift/origin-community-cartridges/issues/8
因此需要在您的应用程序中添加环境变量:
rhc set-env RAILS_ENV = production -a app_name
然后生成资产匹配。

因此在修复之后,在更改资产期间,我们需要再次预编译它们。为了使它们在热部署期间工作,需要在repo中同时拥有旧的预编译资产和新的预编译资产。例如: 如果您有旧文件:
application-10770925dc8abd4ceab34119af4032163cc5a94f3523d60d321f33a999171d58.css
和新的预先复制的文件:
应用82f6fca47056cbda52cb32086051f031b880e2630a137f0e41e96​​cb2eef923ee.css
他们都必须在存储库中。在热部署期间,旧资产仍然被引用,因此它必须位于存储库中。热部署结束后,将引用新资产。在下一次提交和推送旧资产可能会被删除。

所以基本上这个问题对我来说是固定的,现在热部署工作正常。