如何编写 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 控制台或任何其他加载应用程序的命令时,此循环也会启动。
标题还算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 控制台或任何其他加载应用程序的命令时,此循环也会启动。