2017-02-28 6 views
0

모델과 작동하는 레이크 작업이 있습니다. 하지만 모델 대신 Rake에서 사용하는 대신 앱 내에서 사용해야한다고 말해야합니다. 최선의 아이디어는 rake 태스크를 실행하기 전에 명령 행에 환경 변수를 설정하는 것이지만, 팀의 모든 사람들은 환경 변수를 사용해야한다는 것을 기억해야합니다. 특히, 레이크 작업을 실행하는 동안 Delayed::Jobhandle_asynchronously로드를 건너 뛸 if 문이 있습니다. 우리는 우리의 마이그레이션 작업을 실행하면레일스 모델이로드되기 전에 레이크 작업에서 무언가를하십시오.

class Thing < ActiveRecord::Base 
    searchable do 
    string :title 
    text :title, :content 
    end 
    handle_asynchronously unless ENV['MIGRATINGDATA'] 
end 

우리는이 작업을 수행 :

MIGRATINGDATA=true bundle exec rake project:migrate_data

나는 명령 행에 특별한 추가에 대한 필요성을 제거하고 싶습니다. 마이그레이션 코드는 가짜 Sunspot 인스턴스를로드하여 데이터를 이전하는 동안 색인 생성을 해제합니다.

답변

1

그냥 설정 무언가 : 당신의 레이크 작업의 시작이 넣어 당신이 원하는 경우

대신 당신이 할 수 ENV를 사용
ENV['HELLO_RAKE'] = true 

require_relative 'config/application' 

Rails.application.load_tasks 

, 설정 상수, 예를 들면, HELLO_RAKE = true을 입력 한 다음 defined?(HELLO_RAKE)을 확인하십시오. 실행중인 프로그램이 rake 경우

대안은 확인하는 것입니다 :

handle_asynchronously unless File.basename($0) == "rake" 
이러한 접근 방식 모두에 대한 단점은 그들이 효과에 다른 포함됩니다 당신은 레이크을 사용하고있는 시간이 될 것입니다

마이그레이션과 관련이없는 레이크 작업.

+0

작동하는 것처럼 보입니다! 나는 그것을 시도하고 예상대로 작동하는 것 같습니다. ENV를 사용했고 모델에로드되고 설정됩니다. 감사! – Sixty4Bit

0

레이크 작업에서 모델을 사용하는 경우 모델이주의를 기울이면 잘못된 결과가 발생합니다. 대신 매개 변수를 특정 메소드에 추가 할 수 있습니다. 특정 유스 케이스에서는 즉시 작업을 대신 실행할 수 있습니다. 당신의 Rakefile의 상단에

Delayed::Worker.delay_jobs = false 
+0

모델에 대한 좋은 지적은 레이크에 있는지 여부입니다. 일반적으로 동의 하겠지만,이 경우에는 데이터를 이전 중이며이 특정 행은 필요하지 않습니다. 마이그레이션 후 데이터를 처리하기 때문입니다. 이 작업은 한 번만 수행됩니다. 배포가 완료되면이 코드가 제거됩니다. 그러나 실제로 배포 할 때까지 개발 환경에서이 기능이 필요합니다. 'delayed_jobs = false'는 도움이되지 않습니다. 나는 대안에 열려 있습니다. – Sixty4Bit