2010-12-16 3 views
4

저는 appengine 애플리케이션에서 scala와 scalate templating 시스템을 사용해 보려고합니다. 기본적으로 scalate는 컴파일 된 템플릿을 파일 시스템에 쓰려고합니다. 자, 분명히 appengine에서는 작동하지 않을 것입니다. 템플릿을 미리 컴파일하는 방법이 있습니다. 그러나 개발 도중에이 제한을 해제 할 수 있는지 궁금합니다. 컴파일/테스트주기가 상당히 느려집니다. 그냥 무료 JVM/웹 애플리케이션 호스팅을 찾고 있다면 난 강력하게하는 App Engine을 사용에 대해 조언을 줄App Engine 개발 서버의 파일 시스템에 쓰기

답변

-3

...

후 Stax.net은 더 나은 대안을 제공합니다. 다른 기능들 중에서도 파일 시스템에 쓰고 스레드를 생성 할 수 있습니다.

그들은 또한 내부적으로 스칼라를 사용하므로 매우 다른 스칼라 개발자 :

Stax.net으로 수용하고 있습니다 : http://www.stax.net/

(참고 : 나는 STAX에 affilliated 어떠한 방식으로 해요)

+0

나는 여전히 내 옵션을 평가하고 있지만, 적어도 현재로서는 stax.net은 내가 원하는 모든 것을 가지고 있지 않습니다. 새로운 AppEngine 채널 API는 사용하기 쉬운 memcache 서비스, 이미지 서비스 등으로 AppEngine을 흥미로운 플랫폼으로 만듭니다. AppEngine이 제대로 작동하지 않는 경우 EC2로 직접 이동하는 것이 좋습니다. 웹 사이트에서 Stax가 이러한 것들을 얻을 수있는 것처럼 보입니다.이 경우 재평가해야합니다. – nickclare

1

나는 동일한 제한이있는 webpy을 사용하고 있습니다. 템플리트 시스템은 파서 모듈 (차단됨)에 액세스 할 수 없으며 Google App Engine의 파일 시스템에 쓸 수 없기 때문에 미리 템플릿을 사전 컴파일해야합니다.

주어진 디렉토리의 파일이 변경 될 때마다 해당 파일의 사전 컴파일이 시작되는 파이썬 스크립트로이 성가신 문제를 해결했습니다.

나는 OSX에 그리고 난 FSEvents을 사용하고하지만 난 당신이 다른 플랫폼 (리눅스에서 incron, Windows에서 FileSystemWatcher)에 다른 솔루션/라이브러리를 찾을 수 있다고 생각합니다 : 파이썬 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']) 

당신이 그 목록에 'WB'또는 '우'를 추가해야 할 수도 있습니다 바이너리 파일 또는 유니 코드를 작성합니다. 어쩌면 Java dev 서버에 상응하는 것이있을 수 있습니다.