如何解决在不打开浏览器的情况下在轨道上运行ruby的功能
| 你好 我需要构建一个ruby on rails应用程序,该应用程序将每隔1秒调用一次远程Api URL,以便捕获应该在该远程Web服务器中发生的事件 该网址是 \“ remoteservername.com/folder/folder/waitforevents \” 发生所需事件后,我需要执行一些操作,然后再次调用\“ remoteservername.com/folder/folder/waitforevents \”网址。 这应该是一项连续的任务,并且无需打开浏览器即可完成。这意味着该应用程序应在我的Web服务器启动后立即开始运行。 所以我的问题是如何在不打开浏览器的情况下在Rails应用程序上运行ruby 只是服务器 直到现在,我还具有编写Rails应用程序的经验,该应用程序是在打开浏览器并调用某些URL时启动的。 因此,如果您能在这个问题上指导我,我会很高兴 谢谢解决方法
您可以将ѭ0和ѭ1一起使用,这可以从rails应用程序执行任何方法。
由于您需要每秒执行一些操作,因此可以一次启动
runner
并创建一个循环。您可以从cron启动它,将PID保存在某个地方,然后要求cron终止给定的进程,或者您可以在循环中的Ruby代码中超时。一个简单的例子:
class MyModelOrAnything
def self.start_loop
stop_fname = \"./stop_the_loop\"
while !File.exist? stop_fname
do_this_action
sleep 1
end
ensure
File.unlink stop_fname if File.exist? stop_fname
end
end
然后,cron任务可能会在已知目录中创建文件“ stop_the_loop \”,并且您的任务将在一秒钟后停止。
实际上,在这种情况下,可能不需要cron。由于您只应具有此脚本的一个实例,因此最好手动启动它,然后手动停止它。如果要使用cron,则可以添加一个类似信号量的文件,该文件将告诉脚本一个进程已在运行(应使用\'ensure \'块将其删除)。
cron配置的示例:
0 8 * * 1 cd /my/app && bundle exec ./script/rails runner ThisObject.start_loop
0 22 * * 5 touch /my/app/stop_the_loop
..以及带有此\'semaphore \'的示例:
class MyModelOrAnything
def self.start_loop
running_fname = \"./i_am_working\"
return :already_running if File.exist? running_fname
stop_fname = \"./stop_the_loop\"
begin
File.open(running_fname,\'w\') {|f| f.write Time.now.to_s(:db) }
while !File.exist? stop_fname
do_this_action
sleep 1
end
ensure
File.unlink running_fname if File.exist? running_fname
File.unlink stop_fname if File.exist? stop_fname
end
end
end
, 您确定您需要这种应用程序的滑轨吗?我建议您尝试使用原始的红宝石代码来完成这项工作,更易于维护。正如其他人已经说过的那样,您可以使用cron定期启动应用程序。
, 一个好的方法是使用延迟的工作:
https://github.com/collectiveidea/delayed_job
有关该主题的信息可能会有所帮助:
http://railscasts.com/episodes/171-delayed-job
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。