Ruby on rails Rails:where+;延迟作业以优化rake任务?

Ruby on rails Rails:where+;延迟作业以优化rake任务?,ruby-on-rails,cron,rake,delayed-job,whenever,Ruby On Rails,Cron,Rake,Delayed Job,Whenever,我使用随时调用rake任务,但每个任务都会启动一个新的Rails环境。如何在不重新启动每个作业的Rails的情况下全天运行任务 这是我想到的,我很想得到一些反馈 重构每个rake任务,使其成为适当模型中的一个方法 使用delayed_作业gem分配低优先级并确保这些方法异步运行 指示无论何时调用每个Model.method,而不是调用rake任务 这个解决方案有意义吗?它是否有助于避免为每个作业启动新的Rails环境。。还是有更好的方法 -- 运行Rails 3时,您当然可以通过cron将延迟的

我使用随时调用rake任务,但每个任务都会启动一个新的Rails环境。如何在不重新启动每个作业的Rails的情况下全天运行任务

这是我想到的,我很想得到一些反馈

  • 重构每个rake任务,使其成为适当模型中的一个方法

  • 使用delayed_作业gem分配低优先级并确保这些方法异步运行

  • 指示无论何时调用每个Model.method,而不是调用rake任务

  • 这个解决方案有意义吗?它是否有助于避免为每个作业启动新的Rails环境。。还是有更好的方法

    --


    运行Rails 3时,您当然可以通过cron将延迟的\u作业排队,然后让一个长期运行的延迟的\u作业工人

    然后,您可以随时使用
    来帮助您创建延迟作业排队方法。只要
    的cron输出调用一个小的包装器脚本,直接加载活动的\u记录和延迟的\u作业,而不是整个rails堆栈,那么使用
    可能是最容易的

    您可能还想查看clockwork.rb,这是一个长期运行的进程,它将执行与使用cron相同的操作(排队延迟的_作业):


    您也可以尝试在延迟的工作中使用重新排队策略:

    此问题有很多好的解决方案,我最终集成的解决方案如下:

  • 将我的rake代码移动到适当的模型
  • 添加了用于从浏览器调用模型方法的控制器/路由代码
  • 使用
    gem运行
    命令'curl mywebsite.com/model#method'

  • 我试着尝试一下延迟的工作,但不喜欢运行另一个Rails实例的想法。我的方法不太需要服务器,上面的解决方案允许我利用已经运行的Rails环境。

    从schedule.rb评论这一行

    require File.expand_path(File.dirname(__FILE__) + "/environment")
    

    相反,只加载所需的ruby文件,如案例中的模型。

    我也使用过这种方法,我喜欢它。一个curl或wget请求来启动一切。它非常适合REST模型,并与cron或其他东西干净地集成。旁边有一个ruby脚本有点凌乱,对DRY没有帮助。只是想知道,是否有办法进行身份验证,以便外部人员不会在服务器上执行DDOS?@lulalala如果您只有一台服务器,您可以检查服务器所在的IP是否与发出请求的IP相同。在我的例子中,我将nginx配置为只允许少数IP访问cron URL。这不是很不安全吗?我不明白为什么会这样。我只接受来自本地的连接,因为没有理由允许外部请求。我通过nginx处理这个问题,但您也可以通过Rails本身轻松地完成。