开发者

Expose Rails App Environment to Ruby Script

Out of pure curiosity, I am wondering if it's possible (no doubt it is) to 'hook into' a Rails Application's environment. So for example, say I want to create a cron script (I don't) that operates some sort of maintenance on a 开发者_高级运维Rails app, and I want to write it in Ruby and using all of the nice code that I already have, for example, User.find etc.

Is this possible, and if so, how?

I'm just curious, as I feel I would eventually want to do this for some reason or other.

I'm currently on Rails 3 with Ruby 1.9.1, in case it matters.


This is certainly possible. Here is a good writeup on how to do that: How to run a rake task from cron


Take a look at the Rails::Railtie class. If you need to run code code when you start up your app, this is a way to do it. Here's a very simple example.


From the beginning of Rails there is ./script/runner, designed exactly for such kind of problems.

In Rails 3 you call it as: ./script/rails runner "puts User.find(:all).map(&:inspect)"

Try ./script/runner --help or ./script/rails runner --help

As the argument to the runner you provide a filename or just a code.

It's often more useful than preparing a Rake task, because you can execute just one-time actions:

ssh prod@example.com "cd rails/app && ./script/runner -e production 'puts User.count'"


You could either use script/rails runner as suggested by Arsen7 or you could write your own script in which you load the app environment in the beginning:

require 'config/environment'

is actually everything you need.

To have your script working in a cron job, make sure that it is executable (chmod u+x) and that it starts with a correct shebang line (#!/usr/bin/env ruby or whatever is appropriate for your situation).


yeah just require these file at top of your script file

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

Now you'll have access to your models

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜