2010-12-16 95 views
4

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

回答

-3

我强烈建议不要使用AppEngine上...

如果你只是寻找免费的JVM/web应用托管,然后Stax.net提供了一个更好的选择。在其他功能中,它允许您写入文件系统并产生线程。

他们还利用内部的Scala,所以他们很重视其他斯卡拉开发商:)

Stax.net容纳:http://www.stax.net/

(注:我在没有办法affilliated到斯塔克斯)

+0

我仍在评估我的选择,但至少现在,stax.net没有我所需要的一切。新的AppEngine频道API以及易于使用的memcache服务,图像服务等,使AppEngine成为一个有趣的平台。如果AppEngine不能解决问题,那么我宁愿直接去EC2。从网站看来,Stax可能会得到一些这样的东西,在这种情况下,我将不得不重新评估 – nickclare 2010-12-16 14:37:01

1

我目前使用的webpy具有相同的限制,其模板系统无法访问解析器模块(阻止)并且无法写入Google App Engine上的文件系统,因此您需要预先编译模板。

我已经用Python脚本解决了这个烦人的问题,每次给定目录的文件发生更改时,都会触发该文件的预编译。

我在OSX和我使用FSEvents但我相信你可以找到在其他任何平台(incron在Linux中,FileSystemWatcher在Windows上)其他解决方案/库:

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服务器以写入文件系统,请参阅我的答案。 – 2010-12-16 14:13:42

+1

我的编译过程设置为编译模板,无论如何,这对于生成编译来说都是必需的。如果我无法做到这一点,这不是一场完全的灾难,只是希望避免每次更改模板时等待。感谢帖子,虽然不知道FSEvents(我也在OSX上),但它可能会派上用场。 – nickclare 2010-12-16 14:49:47

+0

@nick欢迎您,这真的很方便,快速;你只是忘记它实际上正在编译。 – systempuntoout 2010-12-16 15:08:05

1

在Python开发服务器就可以了,我用它来记录到文件中使用开发服务器时:

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'或“吴”添加到列表中的二进制文件或Unicode。也许在Java开发服务器中有相同的东西。

相关问题