Мне нравится решение, которое Pratik упоминает для общего случая загрузки рельсов для задач, которые в нем нуждаются, а не для тех, которые этого не делают, для любых граблей, без необходимости запоминать заранее.
Менее инвазивный метод запуска рейк-задачи, для которой не нужны рельсы, - это использование опции -f
rake, чтобы указать рейку использовать определенный Rake-файл. Таким образом, рейк не будет искать рейки на всех рельсах.
Например, если ваша задача находится в файле Rakefile на верхнем уровне вашего проекта, а ваш Rakefile не выполняет ничего, что загружает Rails, например require File.expand_path('../config/application', __FILE__)
, вы можете сделать:
$ rake -f Rakefile spec
и он должен выполнить вашу задачу гораздо быстрее. Попробуйте $ time rake -f Rakefile -T
; Я сделал это с независимым от рельсов Rakefile и получил:
real 0m1.543s
user 0m1.308s
sys 0m0.201s
Недостатком является то, что вы должны помнить, чтобы указывать эту опцию каждый раз, а не указывать ее, если вы хотите запускать рейк-задачу из рельсов, таких как rake db:migrate
.