Ruby微服务 - 如何在生产中重新启动/重新生成

问题描述 投票:1回答:1

我目前正在将一些Rails功能转移到一些微服务中,我不会为此解释原因,只需说我们对决定和我们的架构选择感到满意。

目前它并不是特别复杂,一些独立的脚本运行,通过rabbitMQ进行交谈,所有这些脚本都有一些gem依赖项(bunny,mysql2等),当我通过CLI将它们关闭时,它们都运行良好。

我的问题以及我需要一些建议的地方是如何将这些问题移动到可以在失败时自动重新生成的守护进程。

我们目前的平台如下:

Centos 6.5(不要问)RVM 2.5.1@somegemset nginx乘客someuser

对于Rails,我使用Capistrano,使用RVM和Bundler插件,它是火灾和忘记,一切都被部署,如果它摔倒它重新启动,我们去。

我原本以为我可以使用respawn将每个ruby微服务添加到init目录中。但这些工作永远不会开始。

如果我作为另一个用户(而不是rails someuser)连接,我会得到gem / rvm问题。所以我认为它可能是一个路径问题,试图解决它我认为我们可能会丢失rvm并使用bundler install --binstubs。

这可以从命令行工作,例如。 service_directory / bin / bundle exec service.rb

但仍然无法在init中工作,它们只是以状态42开始失败(?)这里是我的初始配置。

start on runlevel [2345]
stop on starting shutdown

respawn

exec /home/someuser/services/some-service/bin/bundle exec /home/someuser/services/some-service/lib/service.rb

我试着用chdir保持整洁,但也没有喜悦。

我曾尝试使用foreman,与foreman start一起工作正常,但创建的upstart导出脚本以同样的方式失败。

我试过用rvm ruby​​包装器作为shebang使它们可执行,脚本包括

require 'rubygems'
require 'bundler/setup'

我读过关于monit的内容但似乎想要我的脚本不能生成的pid。

我确信我错过了一些东西,因为必须有一个简单的方法来允许任何用户(包括root用户和系统用户)访问任何脚本以及找到宝石和运行的东西。

提前致谢。

ruby rvm bundler microservices production
1个回答
0
投票

对于未来我,以及任何发现它有用的人。

我通过使用神宝石来解决它。新手脚本仍然是一个巨大的痛苦,我无法让它按照我喜欢的方式工作,但我确实设法通过使用RVM包装器来使其工作。

最终的upstart脚本看起来像这样。重要的是不要尝试使用* .god加载多个神配置,但这只会加载第一个。最后,我将每个配置块放在一个文件中,正如其他地方所推荐的那样,这让我们进入游戏。

/home/someuser/.rvm/wrappers/ruby-2.5.1@agemset/god -D -P / var / run / god --log /var/log/god.log -c / home / someuser / services / master 。神

这不是理想的。有趣的是,你必须将它作为前台进程运行,即使它是在暴发户中,但是取出-D不起作用。

如果上帝死了,孩子的脚本不会死,这有点令人讨厌。我怀疑有办法杀掉这些服务,但那是另一天。

它至少会在重新启动时启动神的过程,而上帝将负责保持服务。

© www.soinside.com 2019 - 2024. All rights reserved.