2012-08-25 8 views
8

マウント可能なエンジンモデルで直接タスクを実行するには、cron(いつでもgem経由)を使用できますか?マウント可能なエンジンは孤立しているはずなので、私はメインのアプリから始めることはできないと思う。cronを搭載したエンジン(いつでもgem)

通常のレールアプリ内ではいつでも使用でき、うまく動作しますが、エンジンスタイルの方法でタスクを実行する必要があります。

ありがとう

答えて

3

Rails Engineを単独で使用して、Rakeタスクやモデル呼び出しなどのタスクを直接実行することはできません。 RailsエンジンをミニRailsアプリケーションと考えてください。これは、マウント親のRails Appに機能と機能を提供します。それ自体では、エンジンは不完全です。 EngineをRails Appにマウントすると、起動して正しく動作するために必要なすべてのconfigとinitializersにアクセスできます。

マウントされたエンジンのRakeタスクは、親Railsアプリケーションに継承されます。フォローを実行すると、あなたが同様になど、LIBS、マウントRailsのエンジンのモデルを実行することができ、Rails runnerからエンジン

rake -T 

からのRakeタスクのリストを含める必要があります。エンジンの機能にアクセスするときは、エンジンの名前空間を使用する必要があります。ここではエンジンからモデルにアクセスするためのRails Guideからの例です:

Blorgh::Post.find(1) 
+0

私はまだレールエンジンとマウントエンジンへの比較的新しいですので、これは学習曲線です。だから、私がEngineモデルで直接cronを動かせることを私に見せてくれるのであれば、それは私のためにちょっとクリアしますが、実行はホストアプリケーションから始める必要があります。隔離されていると私はマウント可能なエンジンはちょうどそのブラックボックスだと思ったが、あなたが言ったことから私はそれを試してみたが、それは本当にうまくいく。私はこの問題を正しくマークして、レールエンジンの問題を適切に解決し、エンジンについてもう少し詳しく知ることができます。 – pieterk

0

Railsの設計者は間違いなくそれを可能にするつもりはありませんでした。マウント可能なプラグインではサポートされていないレールのランナースクリプトに依存している(理由があるため、ランナーと一緒に走るアプリケーションはありません)。おそらく、別のルビ実行者(レールコンソール、IRBなど)を使用するように設定することによってコードを実行する他の方法を見つけることは可能かもしれませんが、アプリケーションのコンテキストにないので意図しない結果が生じる可能性があります。構成や環境はありません。

ただし、あなたはThe cron I think would not be able to start from the main app since mountable engines are supposed to be isolatedと言っていますが、テストしましたが、そうではありません。ランナータスクの名前空間を適切に指定する限り、アプリケーションの設定ファイルは常に、プラグインコード内の適切なタスクを見つけて実行することができます。なんらかの理由であなたの特定のニーズに対応できない場合は、教えてください。

関連する問題