Подтвердить что ты не робот

У меня есть задача Rails: следует ли использовать script/runner или rake?

Для специальных задач Rails у нас есть несколько альтернатив реализации, среди которых, пожалуй, будет:

script/runner some_useful_thing

и

rake some:other_useful_thing

Какой вариант я должен предпочесть? Если есть явный фаворит, когда, если вообще когда-либо, я должен использовать другой? Если никогда, то почему вы предположили бы, что он все еще присутствует в рамках без предупреждений об отказе?

4b9b3361

Ответ 1

Разница между ними заключается в том, что script/runner загружает Rails, тогда как задача Rake не делает этого, если вы не сообщите об этом, заставив задачу зависеть от :environment, например:

task :some_useful_task => :environment do
  # do some useful task
end

Поскольку загрузка Rails стоит дорого, возможно, стоит пропустить, если вы можете избежать этого.

Кроме этого, они примерно эквивалентны. Я использую оба варианта, но в последнее время я использовал script/runner выполнение script отдельно.

Ответ 2

FWIW кажется, что есть перемещение от использования script бегун в пользу rake:

Обновление (4/25/2009): Я рекомендую использовать задачи рейка, а не script/runner для повторяющихся задач.

Кроме того, как за этот пост, вы можете использовать грабли для повторяющихся задач просто:

Если бы я тогда хотел, чтобы это выполнялось ночью в моей производственной базе данных в полночь, я мог бы написать cronjob, который выглядит примерно так:

0 0 * * * cd/var/www/apps/rails_app/& && & &/usr/local/bin/rake RAILS_ENV = производственные утилиты: send_expire_soon_emails

Ответ 3

Исправлено на основании комментария 2. Дайте им карму!

FWIW - Rails 3.0+ изменяет способ инициализации системы Rails в автономном script.

require File.dirname(__FILE__) + '/config/environment'

Как уже упоминалось выше, вы также можете:

rails runner script/<script name>

Или поместите весь код в задачу Rake, но у меня есть много устаревшего кода из Rails 2; поэтому я не хотел сразу идти по этому пути.

У каждого есть свои преимущества и недостатки.

Ответ 4

Передача параметров в рейк-задачу - это боль в прикладе, если не сказать больше. Вам нужно либо прибегнуть к переменным окружения, либо к очень хакерской системе параметров, которая не является интуитивной и имеет множество предостережений.

Если ваша задача должна обрабатывать аргументы командной строки изящно, то писать script - это путь.

Luke Francl упоминает, что script/бегун загружает Rails. Это правда. Но если вы не хотите загружать рельсы, просто запустите script, как и без script/runner. Таким образом, единственная реальная разница между сценариями и рейк-задачами - их эстетика. Выберите все, что вам нравится.

Я использую задачи грабли для небольших задач (одна или две строки). Все более сложное попадает в каталог script/. Я нарушу это правило, если буду думать, что другие разработчики ожидают, что код будет жить в одном месте над другим.

Ответ 5

Одна вещь, которую я сделал, это просто написать обычные рубиновые скрипты и поместить их в каталог script/maintenance.

Все, что вам нужно сделать, чтобы загрузить рельсы и получить доступ ко всем вашим моделям и т.д., помещается require '../../config/environment.rb' в начало вашего файла, а затем вы отсутствуете.

Ответ 6

В Rails 3.0+ для config/environment.rb требуется config/application.rb, для которого требуется config/boot.rb.

Итак, чтобы загрузить приложение в Rails 3, вам все равно потребуется только environment.rb

Ответ 7

Для одних команд script/runner может быть в порядке. Что-то повторяющееся, в долгосрочной перспективе задача грабли проще, и есть сводка, если вы забудете, что она делает.

Ответ 8

У меня сложилось впечатление, что script/runner был в основном для периодических задач. Например, задание cron, которое выполняется:

SomeClass.update_from_web('http://www.sourcefordata.gov/')