2012-08-25 4 views
8

마운트 할 수있는 엔진 모델에서 직접 작업을 실행하려면 cron (언제나 보석을 통해)을 사용할 수 있습니까? 마운트 할 수있는 엔진은 격리되어 있어야하기 때문에 메인 앱에서 시작할 수 없다고 생각하는 크론.cron이 장착 된 엔진 (보석 인 경우)

정상적인 레일 앱에서 사용할 수 있으며 훌륭하게 작동하지만 엔진 스타일로 작업을 실행할 필요가 있습니다.

감사합니다.

답변

3

Rails Engine을 단독으로 가져올 수 없으며 Rake 작업이나 모델 호출과 같은 작업을 직접 실행할 수 없습니다. Rails Engine을 미니 Rails App으로 생각하십시오. 마운팅 상위 Rails App에 기능 및 기능을 제공합니다. 자체적으로 엔진은 불완전합니다. 엔진을 Rails App에 마운트하면 올바르게 시작하고 작동하는 데 필요한 모든 구성 및 초기화 프로그램에 액세스 할 수 있습니다.

탑재 된 엔진에 대한 레이크 작업이 상위 Rails App로 상속됩니다. 추적을 실행하면 당신은뿐만 아니라 등, libs와, 장착 된 레일 엔진의 모델을 실행할 수 있으며, Rails runner에서 엔진

rake -T 

에서 레이크 작업의 목록을 포함해야한다. 엔진 기능에 액세스 할 때 엔진의 네임 스페이스를 사용해야합니다. 이 학습 곡선 그래서

Blorgh::Post.find(1) 
+0

난 아직도 레일 엔진 및 장착 엔진에 비교적 새로운 오전 : 여기에 엔진에서 모델을 액세스하기위한 Rails Guide에서 예입니다. 그래서 당신이 언급 한 것에서는 엔진 모델에서 cron을 직접 실행할 수 있지만 실행은 호스트 응용 프로그램에서 시작해야한다는 것을 보여 주면서 나에게 조금 깔끔하게 정리합니다. 고립 된 나는 마운트 할 수있는 엔진은 바로 그 블랙 박스라고 생각했지만, 언급 한 내용에서 나는 그것을 시도해 보았습니다. 그것은 정말로 잘 작동합니다. 이 문제는 레일 엔진 문제를 해결하고 엔진에 대한 통찰력을 조금 더 주었기 때문에이 질문을 올바르게 표시 할 것입니다. – pieterk

0

레일 설계자는 분명히 가능하지 않을 것이라고했습니다. 레일즈 러너 스크립트에 의존 할 때마다, 마운트 가능한 플러그인을 지원하지 않습니다 (좋은 이유로 - 러너와 함께 실행할 애플리케이션이 없습니다). 다른 루비 실행자 (레일 콘솔, IRB 등)를 사용할 때마다 코드를 실행하는 다른 방법을 찾는 것이 가능할 수도 있지만, 응용 프로그램의 컨텍스트에 있지 않기 때문에 의도하지 않은 결과가 발생할 수 있습니다. 구성이나 환경이 없습니다.

그러나, 당신은 상태 : The cron I think would not be able to start from the main app since mountable engines are supposed to be isolated을 테스트했지만 테스트를 통과하지 못했습니다. 러너 작업의 이름 공간을 적절하게 지정하면 응용 프로그램의 구성 파일이 플러그인 코드에서 적절한 작업을 찾아 실행할 수 있습니다. 어떤 이유로 든 귀하의 특별한 요구에 부응하지 않을 경우 알려 주시기 바랍니다.

관련 문제