2010-11-16 2 views
2

Из-за чистого любопытства, мне интересно, возможно ли это (без сомнения, это) «подключиться» к среде Rails Application. Например, скажем, я хочу создать скрипт cron (я не знаю), который управляет каким-то обслуживанием в Rails-приложении, и я хочу записать его в Ruby и использовать весь хороший код, который у меня уже есть, для пример User.find и т. д.Expose Rails App Environment to Ruby Script

Возможно ли это, и если да, то каким образом?

Мне просто интересно, поскольку я чувствую, что в конце концов я захочу сделать это по той или иной причине.

В настоящее время я нахожусь на Rails 3 с Ruby 1.9.1, в случае, если это имеет значение.

+0

Разве это не то, что делает консоль Rails? Вы можете взглянуть на источник, чтобы понять, как это делается. –

ответ

1

Это, безусловно, возможно. Вот хорошая запись о том, как это сделать: How to run a rake task from cron

+0

Я не хочу создавать работу cron, это был просто пример. В любом случае, так я понимаю, так вы это делаете? Интегрируя код в грабскую задачу? Кажется достаточно простым, спасибо! –

+0

Кажется, что «трюк», чтобы заставить это работать, состоит в том, чтобы назначить задачу как: task: mytask =>: environment, тогда у вас будет доступ к среде. –

+0

Да, когда вы это сделаете, у вас есть доступ к окружающей среде. Я делаю это все время (не только с задачами cron). – sosborn

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

1

Вы можете использовать скрипт/рельсы бегун как предложено Arsen7 или вы coul d напишите свой собственный сценарий, в котором вы загружаете среду приложения в начале:

require 'config/environment' 

- это на самом деле все, что вам нужно.

Чтобы ваш скрипт работает в хронах, убедитесь, что он является исполняемым (CHMOD и + х), и что он начинается с правильной линией хижины (#!/USR/бен/окр рубин или что подходит для вашей ситуации).