code

Rails 작업이 있습니다. 스크립트 / 러너 또는 레이크를 사용해야합니까?

codestyles 2020. 11. 15. 11:18
반응형

Rails 작업이 있습니다. 스크립트 / 러너 또는 레이크를 사용해야합니까?


위해 특별이 작업을 레일 우리는 할 것 같다 최고 그 중 몇 구현 대안을 가지고 :

script/runner some_useful_thing

과:

rake some:other_useful_thing

어떤 옵션을 선호해야합니까? 분명하게 좋아하는 것이 있다면 언제 다른 것을 사용해야합니까? 그렇지 않다면 왜 사용 중단 경고없이 프레임 워크에 여전히 존재한다고 생각하십니까?


그들 사이의 차이점은 script/runnerRails 부팅하는 반면 Rake 작업은 :environment다음과 같이 작업이에 종속되도록 지정하지 않는 한 그렇지 않습니다 .

task :some_useful_task => :environment do
  # do some useful task
end

Rails를 부팅하는 것은 비용이 많이 들기 때문에 피할 수 있다면 건너 뛸 가치가 있습니다.

그 외에는 거의 동일합니다. 둘 다 사용하지만 최근 script/runner에는 스크립트 실행을 더 많이 사용했습니다.


갈퀴 작업에 매개 변수를 전달하는 것은 아무리 말도 안하더라도 엉덩이에 고통을줍니다. 환경 변수 또는 직관적이지 않고 많은주의 사항이있는 매우 끔찍한 매개 변수 시스템에 의존해야합니다.

작업이 명령 줄 인수를 정상적으로 처리해야하는 경우 스크립트를 작성하는 것이 좋습니다.

Luke Francl은 Rails를 부팅하는 스크립트 / 러너를 언급합니다. 사실입니다. 그러나 레일을 부팅하지 않으려면 스크립트 / 러너없이 그대로 스크립트를 실행하면됩니다. 따라서 스크립트와 레이크 작업의 유일한 차이점은 미학입니다. 자신에게 맞는 것을 선택하십시오.

나는 작은 작업 (한두 줄)에 레이크 작업을 사용합니다. 더 복잡한 것은 script / 디렉토리로 들어갑니다. 다른 개발자가 코드가 다른 곳에서 한곳에있을 것이라고 생각한다면이 규칙을 어길 것입니다.


FWIW 레이크를 선호 하는 스크립트 러너 사용에서 약간의 움직임 이있는 것 같습니다 .

업데이트 (2009 년 4 월 25 일) : 반복 작업에 스크립트 / 러너 대신 레이크 작업을 사용하는 것이 좋습니다.

또한 이 게시물 에 따라 반복 작업에 rake를 사용할 수 있습니다.

그런 다음 자정에 프로덕션 데이터베이스에서 야간에 실행되도록하려면 다음과 같은 cronjob을 작성할 수 있습니다.

00 * * * cd / var / www / apps / rails_app / && / usr / local / bin / rake RAILS_ENV = production utils : send_expire_soon_emails


댓글 2를 기반으로 수정되었습니다. 그들에게 카르마를 줘!

FWIW-Rails 3.0+는 독립 실행 형 스크립트에서 Rails 시스템을 초기화하는 방법을 변경합니다.

require File.dirname(__FILE__) + '/config/environment'

위에서 언급했듯이 다음을 수행 할 수도 있습니다.

rails runner script/<script name>

또는 모든 코드를 Rake 작업에 넣지 만 Rails 2의 레거시 코드가 많이 있습니다. 그래서 바로 그 길로 가고 싶지 않았습니다.

각각의 장점과 단점이 있습니다.


내가 한 한 가지는 일반 루비 스크립트를 작성하여 script/maintenance디렉토리에 넣는 것입니다 .

레일을로드하고 모든 모델에 액세스하는 데 필요한 모든 작업을 require '../../config/environment.rb'파일 맨 위에 놓으면 작업 이 종료됩니다.


일회성 명령의 경우 스크립트 / 러너가 괜찮을 수 있습니다. 반복되는 작업의 경우 레이크 작업은 장기적으로 더 쉬우 며 수행하는 작업을 잊은 경우 요약을 제공합니다.


레일에서 3.0의는 config/environment.rb을 필요로 config/application.rb을 요구하는, config/boot.rb.

따라서 Rails 3에서 앱을로드하려면 여전히 environment.rb


인상 스크립트 / 러너는 주로주기적인 작업을위한 것입니다. 예 : 실행되는 크론 작업 :

SomeClass.update_from_web('http://www.sourcefordata.gov/')

참고 URL : https://stackoverflow.com/questions/591503/i-have-a-rails-task-should-i-use-script-runner-or-rake

반응형