2010-11-16 31 views
2

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

这是可能的,如果是这样,如何?

我只是好奇,因为我觉得我最终会因为某种原因想要这样做。

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

+0

这不就是Rails控制台的作用吗?你可以看看它的来源,看看它是如何完成的。 – 2010-11-16 02:07:35

回答

1

这当然是可能的。这里是一个很好的文字如何做到这一点:How to run a rake task from cron

+0

我不想创建一个cron作业,那只是一个例子。无论如何,所以我认为这是你如何做到的?通过将代码集成到rake任务中?似乎很简单,谢谢! – 2010-11-16 02:19:43

+0

看来,让这个工作的'技巧',就是将任务指定为:task:mytask =>:environment,然后就可以访问环境。 – 2010-11-16 02:21:04

+0

是的,一旦你这样做,你有机会获得环境。我一直这样做(不仅仅是使用cron任务)。 – sosborn 2010-11-16 04:25:56

1

从Rails的开头就有./script/runner,正是为这样的问题而设计的。

在Rails 3你怎么称呼它为:./script/rails runner "puts User.find(:all).map(&:inspect)"

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

作为参数传递给你提供一个文件名或只是一个代号亚军。

这往往比准备Rake任务更加有用,因为你可以只执行一次操作:

ssh [email protected] "cd rails/app && ./script/runner -e production 'puts User.count'" 
0

耶只需要在你的脚本文件的顶部这些文件

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

现在您可以访问您的模型

+1

这实际上太复杂了:_require config/environment_就足够了。 – severin 2012-08-07 11:52:22

1

您可以使用脚本/导轨转轮由Arsen7建议,或者您可以使用d编写您自己的脚本,在其中加载应用程序环境的开始部分:

require 'config/environment' 

实际上是您需要的一切。

为了让您的脚本在cron作业工作,确保它是可执行文件(CHMOD U + X),它具有正确的家当线(#!开头的/ usr/bin中/ env的红宝石或什么适合你的情况)。

相关问题