Qual é a tarefa de 'ambiente' no Rake?

120

De acordo com " Custom Rake Tasks ":

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

Pelo que eu sei, :winner => :environmentsignifica "fazer environmentantes winner". Mas o que é environment? Quando devo usar?

Tentei rake -T, mas na lista não consegui encontrar environment.

Lai Yu-Hsuan
fonte
Confira a nova sintaxe stackoverflow.com/questions/12493337/…
Jahan

Respostas:

120

Você pode obter acesso aos seus modelos e, na verdade, a todo o ambiente tornando as tarefas dependentes da tarefa do ambiente. Isso permite que você faça coisas como run rake RAILS_ENV=staging db:migrate.

Consulte " Tarefas Rake Customizadas ".

Sameer C
fonte
4
Onde está definido na fonte? Descobri onde estão as tarefas rake e encontrei uma definição de tarefa vazia que depende de 'app: ambiente', mas não consigo encontrar a definição da tarefa app: ambiente. github.com/rails/rails/blob/master/railties/lib/rails/tasks/…
odigity
4
@odigity se parece com aqui: github.com/rails/rails/blob/v4.2.4/railties/lib/rails/…
Carson Reinke
41

Ele carrega em seu ambiente Rails para que você possa realmente usar seus modelos e quais não. Caso contrário, não tem ideia dessas coisas.

Portanto, se você fez uma tarefa que acabou de puts "HI!"fazer, não é necessário adicionar a :environmenttarefa às dependências. Mas se você quiser fazer algo User.find(1)assim, vai precisar.

MrDanA
fonte
35

Incluir => :environmentdirá ao Rake para carregar completamente o ambiente do aplicativo, dando à tarefa relevante acesso a coisas como classes, auxiliares, etc. Sem o :environment, você não terá acesso a nenhum desses extras.

Também => :environmentem si não disponibilizar todas as variáveis relacionadas ao meio ambiente, por exemplo environment, @environment, RAILS_ENV, etc.

Lars Levie
fonte
O método do documento da tarefa é muito simples para entendê-lo.
Albert.Qing,