Ruby on rails RubyonRails中的GCP发布/订阅侦听器代码应该放在哪里? 背景和设置

Ruby on rails RubyonRails中的GCP发布/订阅侦听器代码应该放在哪里? 背景和设置,ruby-on-rails,startup,google-cloud-pubsub,rails-console,Ruby On Rails,Startup,Google Cloud Pubsub,Rails Console,我有一个名为“测试”的谷歌云平台(GCP)发布/子主题,为此我在网站上发布了几条消息。我正在使用RubyonRails应用程序订阅此主题。从中,我将代码片段(在这里简单复制)放在初始化器文件config/initializers/pubsub.rb require "google/cloud/pubsub" pubsub = Google::Cloud::PubSub.new sub = pubsub.subscription "test" subscr

我有一个名为“测试”的谷歌云平台(GCP)发布/子主题,为此我在网站上发布了几条消息。我正在使用RubyonRails应用程序订阅此主题。从中,我将代码片段(在这里简单复制)放在初始化器文件
config/initializers/pubsub.rb

require "google/cloud/pubsub"
pubsub = Google::Cloud::PubSub.new
sub = pubsub.subscription "test"

subscriber = sub.listen threads: { callback: 16 } do |received_message|
  puts "Data: #{received_message.message.data}, published at #{received_message.message.published_at}"
  received_message.acknowledge!
end

subscriber.start
sleep
为了测试应用程序是否可以接收消息,我启动Rails控制台并确认消息已经到达。尤里卡

数据:我从GCP云控制台输入的测试消息,发布于2021-04-30 16:36:42-0400

问题 Rails控制台无法接收任何输入。通过在初始值设定项中启动订阅侦听器,我有效地使Rails控制台无法运行


如何在不中断应用程序其余部分的情况下启动应用程序中的订阅侦听器(此场景的Rails方式是什么)?

您在初始值设定项中调用“睡眠”(永远睡眠)?它直接来自他们提供的文档,并带有注释“阻止,让处理线程在后台继续”。“阻止”就是这个意思。阻塞只有在您不做任何其他事情时才有用——它可以防止进程终止。Rails应用程序还做其他事情,比如处理web请求。你让所有人都睡着了,除了听众。谢谢@DaveNewton,取消了
sleep
呼叫,我仍然可以使用Rails控制台,应用程序仍然像以前一样工作。应用程序仍然可以接收来自GCP Pub/Sub的消息,我可以像以前一样使用该应用程序。
sleep
在他们的示例中,因此独立脚本不会在结束时终止,也就是说,它使进程保持活动状态,这样子线程也不会终止。由于Rails/console/etc.已经不退出,
睡眠
是不必要的,但是。。。睡觉:)