如何编写 stops/breaks 无限循环 Rails 应用程序的 Web 按钮?

How do I code a web button that stops/breaks an infinite loop Rails app?

标题还算self-explanatory。我想构建一个 always-on rails 脚本,这很容易。我还希望用户能够通过 Web 界面中断循环、更改参数并重新启动。我该如何实现?

标准警告适用 - 很抱歉我是个菜鸟,我肯定用谷歌搜索了这个,只是为了得到关于 CTRL + [=16= 的大量结果]C。预先感谢所有帮助。

如果你想要一个轻量级的解决方案,你可以将这个初始化器放入config/initializers:

class MyLoop
  def initialize
    @stop       = false
    @semaphore  = Mutex.new
  end

  def self.instance
    @@instance ||= new
  end

  def start
    @semaphore.synchronize do
      @thread = Thread.new do
        loop until @stop
      end
    end
  end

  def stop
    @semaphore.synchronize do
      @stop = true
      @thread.join
      @stop = false
    end
  end

  def restart
    stop
    start
  end

  def loop
    #call your twitter service here
  end
end

ActiveSupport.on_load(:after_initialize) do
  MyLoop.instance.start
end

loop 方法中调用您的 Twitter 服务。然后您可以在控制器中定义将停止或重新启动循环的操作:

def stop_twitter_service
  MyLoop.instance.stop
  render nothing: true
end

def restart_twitter_service
  MyLoop.instance.restart
  render nothing: true
end

页面上的按钮应向这些操作发出 AJAX 请求。

请注意,当您 运行 使用 rails 控制台或任何其他加载应用程序的命令时,此循环也会启动。