在App Engine开发服务器中写入文件系统

时间:2010-12-16 10:12:33

标签: google-app-engine scala

我只是尝试在appengine应用程序上使用scala和scalate模板系统。默认情况下,scalate会尝试将已编译的模板写入文件系统。现在,显然这不适用于appengine,并且有一种预编译模板的方法。但我想知道是否有可能在开发期间关闭此限制。它会大大减慢编译/测试周期。

3 个答案:

答案 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没有任何支持)