Какая задача "окружающая среда" в Rake?

120

Согласно « Пользовательским задачам рейка »:

desc "Pick a random user as the winner"
task :winner => :environment do
  puts "Winner: #{pick(User).name}"
end

Насколько мне известно, :winner => :environmentсредство «делали environmentраньше winner». Но что environment? Когда мне его использовать?

Я пробовал rake -T, но в списке не нашел environment.

Лай Юй-Сюань
источник
Ознакомьтесь с новым синтаксисом stackoverflow.com/questions/12493337/…
Джахан

Ответы:

120

Вы можете получить доступ к своим моделям и, по сути, ко всей среде, сделав задачи зависимыми от задачи среды. Это позволяет делать такие вещи, как run rake RAILS_ENV=staging db:migrate.

См. « Пользовательские задачи рейка ».

Самир С
источник
4
Где это определено в источнике? Я нашел, где находятся задачи с граблями, и нашел пустое определение задачи, которое зависит от «app: environment», но я не могу найти определение задачи app: environment. github.com/rails/rails/blob/master/railties/lib/rails/tasks/…
odigity
4
@odigity Похоже здесь: github.com/rails/rails/blob/v4.2.4/railties/lib/rails/ ...
Карсон Рейнке
41

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

Так что, если вы сделали задачу, которая только что была выполнена, puts "HI!"вам не нужно добавлять :environmentзадачу в зависимости. Но если вы хотите сделать что-то вроде User.find(1)хорошего, ему это понадобится.

MrDanA
источник
35

Включение => :environmentбудет указывать Rake на полную загрузку среды приложения, предоставляя соответствующей задаче доступ к таким вещам, как классы, помощники и т. Д. Без этого у :environmentвас не будет доступа ни к одному из этих дополнений.

Кроме того, => :environmentсамо по себе не предоставляет каких - либо связанных с окружающей средой переменные, например environment, @environment, RAILS_ENVи т.д.

Ларс Леви
источник
Метод документирования задачи слишком прост для понимания.
Albert.Qing