2011-08-12 5 views
89

: 레이크의 '환경'과제는 무엇입니까? "<a href="http://railscasts.com/episodes/66-custom-rake-tasks" rel="noreferrer">Custom Rake Tasks</a>"에 따르면

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을 찾을 수 없습니다.

+0

체크 아웃은 소스에 정의 된 새로운 구문 http://stackoverflow.com/questions/12493337/rake-aborted-undefined-method-map-for-namesymbol –

답변

88

작업을 환경 태스크에 종속시킴으로써 모델에 액세스하고 전체 환경에 액세스 할 수 있습니다. 이를 통해 run rake RAILS_ENV=staging db:migrate과 같은 작업을 수행 할 수 있습니다.

"Custom Rake Tasks"을 참조하십시오.

+3

? 레이크 작업이있는 곳을 찾았는데 'app : environment'에 종속 된 빈 작업 정의를 찾았지만 app : environment 작업의 정의를 찾을 수 없습니다. https://github.com/rails/rails/blob/master/railties/lib/rails/tasks/engine.rake – odigity

+0

@odigity https://github.com/rails/rails/blob/v4처럼 보입니다. 2.4/railties/lib/rails/application.rb # L454 –

31

실제로 Rails 환경에서로드되므로 모델을 실제로 사용할 수 있으며 실제로는 사용할 수 없습니다. 그렇지 않으면, 그것들에 대해 전혀 모른다.

따라서 puts "HI!"의 작업을 수행 한 경우 :environment 작업을 종속성에 추가 할 필요가 없습니다. 그러나 당신이 그것을 필요로 할 User.find(1) 같이 잘 무언가를하고 싶은 경우에.

22

=> :environment을 포함하면 Rake에게 클래스, 헬퍼 등과 같은 관련 작업에 액세스 할 수 있도록 응용 프로그램 환경 전체를로드하도록 알립니다. :environment이 없으면 해당 추가 기능에 액세스 할 수 없습니다.

=> :environment도 환경 관련 변수를 사용할 수 없습니다. 예 : environment, @environment, RAILS_ENV

+0

작업 문서의 방법은 너무 이해하기 쉽지 않습니다. –

관련 문제

 관련 문제