如何使用Sinatra作为服务运行Ruby应用程序

时间:2015-11-06 02:50:30

标签: ruby linux sinatra daemon

我知道这个问题已被多次询问和回答,我已经阅读了关于这个主题的所有问答,但我仍然感到很困惑。

我是一个Ruby noob,试图让Sinatra和Strava构建一个由其他人构建的Ruby应用程序,以便在Linux中作为服务运行。它是一个处理与github同步Transifex语言翻译的网关。我已经分解了原始代码并修复了一些错误,以至于它现在运行良好。我的回购在这里:

https://github.com/Fabrik/txgh

原始文档仅显示如何使用“bundle exec rackup”从命令行运行它。我通过简单地从rc.local背景化bundle命令尝试了daemonizing,但这不起作用。我并不擅长使用bundle,因为它运行在专用的小型Amazon ECS实例上,我不会在其上安装任何其他Ruby,因此没有版本问题的危险。所以不使用bundle的解决方案很好。

我猜这个答案可能是使用'守护进程'的宝石,我已经尝试过,但我无处可去。

如果有人可以看看那个github回购,并指出我正确的方向,我将非常感激。我发誓,我已经给了我最好的拍摄,花了很多时间在谷歌上搜索和试验!

更新

自发布此消息以来,Transifex的作者已经开始开发这个txgh网关,合并了我需要的更改,并将其调整为能够在Heraku上运行。任何需要在github和Transifex之间进行网关的人都应该到这里:

A server that integrates Transifex with GitHub

1 个答案:

答案 0 :(得分:0)

修改

虽然我怀疑这是一个非常好的答案,但这是一个很好的方法来测试发生了什么......

我相信,一旦您的容器的主要流程(亚马逊实例)完成,就会出现关闭和清理流程,导致服务终止,并将其置于&#34睡眠"直到它再次需要。

我认为这实际上是一个"功能"与"弹性"相关系统的一个方面,就像Heroku在"自动缩放"时动态关闭Dynos。

要测试此理论,一旦将服务设置为在后台运行,请在前台启动另一个应用程序(以便主进程仍处于活动状态并挂起)。

即:

# do whatever you need to setup the service, i.e.:
bundle exec rackup &
# hang the main process for infinity:
ruby -e "sleep"

如果您的服务没有像之前那样关闭,我认为可以肯定的是,亚马逊会让您失望。

我希望您的服务关机在主要流程“忙碌”时花费更长的时间。不过,我认为所有服务在没有收到请求时都会关闭,所以我怀疑是否有任何"弹性"容器永远存在。

原始答案,当我还没有理解这个问题时

我可能没有正确理解你的问题...但是......

你可以使用命令末尾的&符号在后台运行一个进程(它是一个unix / linux操作系统)。

尝试:

bundle exec rackup &

另一个问题是......为什么?为什么不让服务器作为主Docker容器服务运行?为什么妖魔化应用程序?