【问题标题】:How do I run a Ruby app using Sinatra as a service如何使用 Sinatra 作为服务运行 Ruby 应用程序
【发布时间】:2016-02-07 02:52:59
【问题描述】:

我知道这个问题已经被问过很多次了,而且我已经阅读了关于这个主题的所有问答,但我仍然很困惑。

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

https://github.com/Fabrik/txgh

原始文档仅展示了如何使用“bundle exec rackup”从命令行运行它。我尝试通过简单地将 rc.local 中的 bundle 命令后台化来进行守护进程,但这不起作用。我并不热衷于使用 bundle,因为它在专用的小型 Amazon ECS 实例上运行,并且我不会在其上安装任何其他 Ruby,因此没有版本控制问题的危险。所以不使用 bundle 的解决方案就可以了。

我猜答案可能是使用“守护进程”gem,我已经尝试过,但无济于事。

如果有人可以查看该 github 存储库,并为我指明正确的方向,我将不胜感激。我发誓我已经尽力了,并且花了很多时间在谷歌上搜索和试验!

更新

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

A server that integrates Transifex with GitHub

【问题讨论】:

    标签: ruby linux sinatra daemon


    【解决方案1】:

    编辑

    虽然我怀疑这是一个很好的答案,但这是测试正在发生的事情的好方法......

    我相信,一旦你的容器的主进程(亚马逊实例)完成,就会有一个关闭和清理进程来终止服务,让它“休眠”直到再次需要它。

    我认为这实际上是与系统的“弹性”方面相关的“功能”,就像 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 容器服务运行呢?为什么要妖魔化应用程序?

    【讨论】:

    • 我尝试将它作为背景,如我的帖子中所述,并在 repo 中的 README 末尾,使用 ...
    • (糟糕,不知道 5 分钟的编辑限制。我的第一个 StackOverflow 问题。) su - ec2-user -c 'cd /home/ec2-user/txgh && /home/ec2 -user/bin/bundle exec rackup &' ... 然后运行 ​​... 几分钟。不知道是什么杀死了它,它没有留下任何痕迹。我做 UNIX 管理员已经有 30 年了,这让我很头疼。因此需要找到一种方法,用守护进程 gem 之类的东西真正守护它。我没有使用 Docker,这只是一个简单的 ECS t2-micro 实例。
    • 好吧,你不是在运行服务器,而是在运行 docker 容器。我假设一旦 Docker 容器的主进程引用,就会有一个关闭和清理进程来终止服务。为什么要在后台运行?这样做非常罕见。
    • 不,没有 Docker。这是一个普通的 EC2 t2.micro Linux 实例。
    • 请注意,Docker 的困惑是因为当我认为您指的是 EC2 时,您一直在提及 ECS。哦亚马逊和他们的命名:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    相关资源
    最近更新 更多