Pylons コントローラーを別のアプリとして実行しますか?
質問
Pylons アプリがあり、ロジックの一部を別のバッチ プロセスに移動したいと考えています。テストのためにメインアプリの下で実行していますが、データベースで多くの作業を行うことになるため、バックグラウンドで常に実行される別のプロセスにしたいと考えています。メインの pylons アプリはジョブをデータベースに送信し、新しいプロセスが各ジョブで要求された作業を実行します。
コントローラーをスタンドアロン スクリプトとして起動するにはどうすればよいですか?
現在私が持っているもの:
from warehouse2.controllers import importServer
importServer.runServer(60)
コントローラー ファイル内にありますが、コントローラー クラスの一部ではありません。
def runServer(sleep_secs):
try:
imp = ImportserverController()
while(True):
imp.runImport()
sleepFor(sleep_secs)
except Exception, e:
log.info("Unexpected error: %s" % sys.exc_info()[0])
log.info(e)
ただし、コマンド ラインで ImportServer.py を起動すると、次のような結果になります。
2008-09-25 12:31:12.687000 Could not locate a bind configured on mapper Mapper|I
mportJob|n_imports, SQL expression or this Session
解決
私は自分の回答を編集し、Ben Bangert による他の回答が正しいので賛成票を投じます。私は答え、それ以来正しい方法を学びました(後述)。本当に必要な場合は、この回答の履歴をチェックして、私が最初に提案した間違った(ただし機能する)解決策を確認してください。
他のヒント
Pylons の外部からのモデルなど、Pylons アプリの一部を読み込む場合は、最初にスクリプトに Pylons アプリを読み込みます。
from paste.deploy import appconfig
from pylons import config
from YOURPROJ.config.environment import load_environment
conf = appconfig('config:development.ini', relative_to='.')
load_environment(conf.global_conf, conf.local_conf)
これにより、Pylons アプリが読み込まれ、SQLAlchemy モデルとセッションを使用してデータベースを操作できるように、ほとんどの状態が設定されます。
コードで request/response/etc などの pylon グローバルを使用している場合、存在するにはリクエストが進行中である必要があるため、機能しないことに注意してください。
所属していません StackOverflow