2010-12-16 90 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開發服務器中有相同的東西。

相關問題