我有一个允许用户创建应用程序的Rails 4应用程序,一切正常,但是在确定应用程序部署程序时遇到了问题。
部署者执行一些逻辑,然后为新应用创建Nginx主机文件,并将其添加到Nginx sites-available
,然后将其符号链接到sites-enabled
。所有这些都很好,问题在于,要让Nginx知道这台新主机,就需要重新加载,我可以在部署过程中自动进行加载,但会中断请求。
这是流程:
1-用户单击“部署”按钮
2-Rails控制器操作执行逻辑,然后进行一些系统调用,包括重新加载Nginx。
3-浏览器返回一个502 Bad Gateway
<-问题
然后,如果我重新加载页面,一切都很好,并且可以访问新应用。
如何防止这种情况?我尝试同时使用service nginx reload
和kill -HUP $( cat /run/nginx.pid )
并获得相同的结果。
有趣的是,如果我部署已经部署的应用程序(sites-available
/ sites-enabled
中已经存在主机文件),则不会发生502错误的网关。
有什么想法吗?
编辑
在Nginx重新加载后添加3秒sleep
似乎可以解决此问题,目前可以解决,但这并不是最好的解决方案,因此欢迎更好的想法!