如何在 heroku 上运行带有事件机侦听器的 ruby​​ 脚本?

Posted

技术标签:

【中文标题】如何在 heroku 上运行带有事件机侦听器的 ruby​​ 脚本?【英文标题】:how do I run a ruby script with an event machine listener on heroku? 【发布时间】:2015-09-06 04:09:40 【问题描述】:

我有一个脚本,它使用一个带有 eventmachine 的 gem,它监听 API 调用(它是 slack-api gem)。

在我的开发环境中,我只运行bundle exec ruby ruby_slack.rb,控制台显示它正在侦听。当 API 调用命中时,我会看到 stdout

我如何在 heroku 中有同样的行为?

我创建了一个Procfile,其中包含:web: bundle exec ruby slack.rb,但我认为它只是在等待来自网络应用程序的请求来运行它。

我希望它运行(并继续运行)监听事件。

谢谢。

【问题讨论】:

您是否尝试将其设置为 Rack 应用程序? 我不知道该怎么做。我可以谷歌它。这让我能做什么? Rack 充当您用 ruby​​ 编写的应用程序的 Web 服务器接口。 ***.com/questions/2256569/what-is-rack-middleware。顺便说一句,有什么方法可以显示您的应用程序的外观吗? 我将如何展示它?没有网页界面。只是在 do 循环中等待 API 调用。它使用实时 API 来发送消息,看起来就像事件机器将其拾取然后运行它。如何在 Heroku 中启用机架?看起来我可以使用 config.ru 文件,但想看看是否有类似的持久监听器示例。 【参考方案1】:

您需要一个在 Heroku 要求它响应的端口上响应的 web 服务器和一个用于 websocket 处理的线程。以 Sinatra 为例:

require 'sinatra/base'

module MyBot
  class Web < Sinatra::Base
    get '/' do
      'Hello world.'
    end
  end
end

Thread.new do
  # run your Slack RealTime bot here
end

run MyBot::Web

这是在this tutorial 中捕获的。通常也可以尝试slack-ruby-bot,它会为您完成所有繁重的工作。

【讨论】:

以上是关于如何在 heroku 上运行带有事件机侦听器的 ruby​​ 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

如何获得一个循环来加载带有事件监听器的影片剪辑

如何在 Heroku 上使用带有 Axios 和 Vue 的 Postgres 数据库?

如何调试带有whitenoise,gunicorn和heroku的Django静态文件?

带有 Gmail 服务的 Nodemailer 无法在 heroku 上运行

Heroku 上带有容器注册表的发布阶段运行容器

如何将信息窗口添加到标记事件侦听器 [重复]