Запись в файловую систему на сервере разработки App Engine - PullRequest
4 голосов
/ 16 декабря 2010

Я просто пытаюсь использовать scala и систему шаблонов для масштабирования в приложении appengine. По умолчанию scalate пытается записать скомпилированный шаблон в файловую систему. Теперь, очевидно, это не будет работать на appengine, и есть способ предварительно скомпилировать шаблоны. Но мне было интересно, можно ли отключить это ограничение только во время разработки. Это немного замедляет цикл компиляции / тестирования.

Ответы [ 3 ]

1 голос
/ 16 декабря 2010

В настоящее время я использую 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) 
1 голос
/ 16 декабря 2010

На сервере Python dev вы можете использовать его для входа в файл при использовании сервера 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-сервере есть что-то эквивалентное.

0 голосов
/ 16 декабря 2010

Я бы настоятельно рекомендовал не использовать AppEngine ...

Если вы просто ищете бесплатный хостинг JVM / веб-приложений, то Stax.net предлагает лучшую альтернативу. Среди других функций, он позволяет вам писать в файловую систему и порождать потоки.

Они также используют Scala внутри, поэтому они очень любезны по отношению к другим разработчикам Scala:)

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

(Примечание: я никоим образом не связан со Stax)

...