2010-12-16 13 views
4

私はappengineアプリケーションでscalaとscalateテンプレートシステムを試しています。デフォルトでは、scalateはコンパイルされたテンプレートをファイルシステムに書き込もうとします。今、明らかにこれはappengineでは機能しませんし、テンプレートをプリコンパイルする方法もあります。しかし、開発中にこの制限をオフにすることが可能かどうかは疑問でした。それはコンパイル/テストサイクルをかなり遅くします。あなただけの自由なJVM/Webアプリケーションのホスティングを探しているなら、私は強くAppEngineのを使用しないことをお勧めするApp Engine開発サーバーのファイルシステムに書き込む

答えて

-3

...

は、その後、Stax.netは、より良い代替手段を提供しています。他の機能の中でも、ファイルシステムに書き込んでスレッドを生成することができます。

、彼らは非常に他のScalaの開発者:)

Stax.netに向けて収容しているので、彼らはまた、内部的にスカラを使用:http://www.stax.net/

(注:私はスタックスにaffilliated決してよ)

+0

私はまだ自分の選択肢を評価していますが、少なくとも今のところ、stax.netには私が探しているものすべてがありません。新しいAppEngineチャンネルAPI、使いやすいmemcacheサービス、画像サービスなどにより、AppEngineは面白いプラットフォームになりました。 AppEngineがうまく行かない場合、可能であれば、私はむしろEC2に直接行くだろう。ウェブサイトからStaxのようなものが得られるかもしれませんが、その場合は再評価する必要があります – nickclare

1

私は現在、同じ制限があるwebpyを使用しています。テンプレートシステムはパーサーモジュール(ブロック)にアクセスできず、Google App Engine上のファイルシステムに書き込むことができないため、テンプレートをプリコンパイルする必要があります。

この厄介な問題は、特定のディレクトリのファイルが変更されるたびに、そのファイルのプリコンパイルをトリガするPythonスクリプトで解決しました。

私はOSX上だと私は FSEventsを使用していますが、私はあなたが他のプラットフォーム上の他のソリューション/ライブラリ(Linuxでは incron、Windows上 FileSystemWatcher)を見つけることができると信じて

:Pythonのdevに

from fsevents import Observer 
from fsevents import Stream 
from datetime import datetime 
import subprocess 
import os 
import time 

PROJECT_PATH = '/Users/.../Project/GoogleAppEngine/stackprinter/' 
TEMPLATE_COMPILE_PATH = os.path.join(PROJECT_PATH,'web','template.py') 
VIEWS_PATH = os.path.join(PROJECT_PATH,'app','views') 

def callback(event): 
    if event.name.endswith('.html'): 
     subprocess.Popen('python2.5 %s %s %s' % (TEMPLATE_COMPILE_PATH ,'--compile', VIEWS_PATH) , shell=True) 
     print '%s - %s compiled!' % (datetime.now(), event.name.split('/')[-1]) 

observer = Observer() 
observer.start() 
stream = Stream(callback, VIEWS_PATH, file_events=True) 
observer.schedule(stream) 

while not observer.isAlive(): 
    time.sleep(0.1) 
+0

実際に、devサーバを修正してファイルシステムに書き込むことができます。 –

+1

私は自分のビルドプロセスをテンプレートをコンパイルするように設定していますが、それはとにかくプロダクションビルドに必要です。私がテンプレートを変更するたびに待つのを避けることを望むなら、私はこの仕事を得ることができないのであれば大惨事ではありません。投稿してくれてありがとう、FSEventsについて知りませんでした(私もOSXを使っています)、それは他のもののために便利になるかもしれません! – nickclare

+0

@nickあなたは大歓迎です、それは本当に便利で速いです。実際にコンパイルしていることを忘れてしまいます。 – systempuntoout

1

devのサーバーを使用している場合、サーバーあなたは、私は、ファイルにログを記録するためにそれを使用することができます:

if os.environ.get('SERVER_SOFTWARE','').startswith('Dev'): 
    from google.appengine.tools.dev_appserver import FakeFile 
    FakeFile.ALLOWED_MODES = frozenset(['a','r', 'w', 'rb', 'U', 'rU']) 

あなたはバイナリファイルまたはUnicodeを書きたい場合は、そのリストに「WB」や「WU」を追加する必要があります。たぶん、Javaのdevサーバーに相当するものがあります。

関連する問題