我只是尝试在appengine应用程序上使用scala和scalate模板系统。默认情况下,scalate会尝试将已编译的模板写入文件系统。现在,显然这不适用于appengine,并且有一种预编译模板的方法。但我想知道是否有可能在开发期间关闭此限制。它会大大减慢编译/测试周期。
答案 0 :(得分:1)
我目前正在使用具有相同限制的webpy,其模板系统无法访问解析器模块(已阻止)且无法写入Google App Engine上的文件系统,因此您需要预编译模板前期。
我用Python脚本解决了这个烦人的问题,每次更改给定目录的文件时,都会触发该文件的预编译。
我正在使用OSX而我正在使用FSEvents,但我相信您可以在任何其他平台上找到其他解决方案/库(Linux中为incron,Windows上为FileSystemWatcher):
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)
答案 1 :(得分:1)
在Python 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开发服务器中有相同的东西。
答案 2 :(得分:-3)
我强烈建议不要使用AppEngine ......
如果您只是在寻找免费的JVM / webapp托管,那么Stax.net提供了更好的选择。在其他功能中,它允许您写入文件系统并生成线程。
他们也在内部使用Scala,因此他们非常适应其他Scala开发人员:)
Stax.net:http://www.stax.net/
(注意:我对Stax没有任何支持)