代码之家  ›  专栏  ›  技术社区  ›  Jorge Israel Peña

向Ruby脚本公开Rails应用程序环境

  •  2
  • Jorge Israel Peña  · 技术社区  · 14 年前

    出于纯粹的好奇心,我想知道是否有可能(毫无疑问是这样的)与Rails应用程序的环境“挂钩”。例如,假设我想创建一个cron脚本(我不想),在Rails应用程序上运行某种维护,我想用Ruby编写它,并使用我已经拥有的所有好代码,例如, User.find 等。

    这有可能吗?如果有,怎么办?

    我只是好奇,因为我觉得我最终会想做这个或其他原因。

    我目前在Rails 3上使用Ruby 1.9.1,以防万一。

    5 回复  |  直到 14 年前
        1
  •  1
  •   sosborn    14 年前

    这当然是可能的。下面是一篇关于如何做到这一点的好文章: How to run a rake task from cron

        2
  •  1
  •   monocle    14 年前

    看看 Rails::Railtie class . 如果在启动应用程序时需要运行代码,这是一种方法。 Here's a very simple example.

        3
  •  1
  •   Arsen7    14 年前

    从Rails开始就有./script/runner,专门为此类问题设计的。

    在Rails 3中,您称之为: ./script/rails runner "puts User.find(:all).map(&:inspect)"

    尝试 ./script/runner --help ./script/rails runner --help

    作为运行程序的参数,您可以提供文件名或只是代码。

    它通常比准备Rake任务更有用,因为您只能执行一次性操作:

    ssh prod@example.com "cd rails/app && ./script/runner -e production 'puts User.count'"
    
        4
  •  1
  •   severin    12 年前

    你也可以用 脚本/rails runner 按照Arsen7的建议,或者您可以编写自己的脚本,在其中加载应用程序环境:

    require 'config/environment'
    

    是你所需要的一切。

    要让脚本在cron作业中工作,请确保它是可执行的( chmod u+x )从一条正确的shebang线开始( #!/usr/bin/env红宝石 或者任何适合你的情况)。

        5
  •  0
  •   Naveed    12 年前

    是的,只要把这些文件放在脚本文件的顶部

    require  'config/boot.rb' 
    require 'config/application.rb'
    Rails.application.require_environment!
    

    现在你可以访问你的模型了