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

发布于 2024-10-08 02:10:10 字数 157 浏览 1 评论 0原文

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

I'm just trying out using scala and the scalate templating system on an appengine application. By default, scalate tries to write the compiled template to the filesystem. Now, obviously this won't work on appengine, and there is a way to precompile the templates. But I was wondering if it is possible to switch off this restriction, just during development. It slows down the compile/test cycle quite a bit.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

浅忆 2024-10-15 02:10:10

在 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'])

如果您想写入二进制文件或 unicode,您可能需要将“wb”或“wU”添加到该列表中。也许 Java 开发服务器中有类似的东西。

In the Python dev server you can, I use it to log to a file when using the dev server:

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'])

If you want to write binary files or unicode you might need to add 'wb' or 'wU' to that list. Maybe there is something equivalent in the Java dev server.

手心的温暖 2024-10-15 02:10:10

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

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

我在 OSX 上并且正在使用 FSEvents 但我相信您可以找到其他解决方案/任何其他平台上的库(Linux 中的 incron,< a href="https://stackoverflow.com/questions/760904/how-can-i-monitor-a-windows-directory-for-changes">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) 

I'm currently using webpy that has the same limitation, its templating system can't access parser module (blocked) and can't write to filesystem on Google App Engine, so you need to precompile the templates upfront.

I have resolved this annoying issue with a Python script that, everytime a file of a given directory is changed, triggers the precompilation of that file.

I'm on OSX and I'm using FSEvents but I believe you can find other solutions/libraries on any other platform (incron in Linux, FileSystemWatcher on 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) 
星光不落少年眉 2024-10-15 02:10:10

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

如果您只是在寻找免费的 JVM/webapp 托管,那么 Stax.net 提供了更好的选择。除其他功能外,它还允许您写入文件系统并生成线程。

他们也在内部使用 Scala,因此他们对其他 Scala 开发人员非常包容:)

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

(注:我与 Stax 没有任何关系)

I'd strongly advise against using AppEngine...

If you're just looking for free JVM/webapp hosting, then Stax.net offers a better alternative . Amongst other features, it allows you to write to the filesystem and to spawn threads.

They also use Scala internally, so they're very accommodating towards other Scala developers :)

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

(Note: I'm in no way affilliated to Stax)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文