Rails 작업이 있습니다. 스크립트 / 러너 또는 레이크를 사용해야합니까?
위해 특별이 작업을 레일 우리는 할 것 같다 최고 그 중 몇 구현 대안을 가지고 :
script/runner some_useful_thing
과:
rake some:other_useful_thing
어떤 옵션을 선호해야합니까? 분명하게 좋아하는 것이 있다면 언제 다른 것을 사용해야합니까? 그렇지 않다면 왜 사용 중단 경고없이 프레임 워크에 여전히 존재한다고 생각하십니까?
그들 사이의 차이점은 script/runner
Rails 를 부팅하는 반면 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
'code' 카테고리의 다른 글
4xx / 5xx에서 예외를 throw하지 않고 Powershell 웹 요청 (0) | 2020.11.15 |
---|---|
얼마나 많은 null 검사로 충분합니까? (0) | 2020.11.15 |
XPath를 사용하여 텍스트 내용과 속성 값을 기반으로 노드를 어떻게 선택합니까? (0) | 2020.11.15 |
문자열의 첫 번째 (또는 마지막) n 개 문자 추출 (0) | 2020.11.14 |
Oracle 11g db에서 사용자 목록을 찾는 방법 (0) | 2020.11.14 |