如何在 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静态文件?