如何在Google App引擎中运行金字塔应用

spl*_*ddy 3 pyramid gcloud

我一直在尝试使金字塔在Google App Engine中运行,但没有解决。我尝试按照此处的说明进行操作但由于gae不再具有appcfg.py,它似乎已过时。我遵循了App Engine文档上的flask应用程序教程,并将其与上面的应用程序结合起来以获取此信息:app.yaml

runtime: python
env: flex

runtime_config:
  python_version: 3
threadsafe: false

handlers:
- url: /static
  static_dir: contractors/static
- url: /.*
  script: auto
Run Code Online (Sandbox Code Playgroud)

然后main.py:

from pyramid.paster import get_app, setup_logging
ini_path = 'production.ini'
setup_logging(ini_path)
app = get_app(ini_path, 'main')
Run Code Online (Sandbox Code Playgroud)

在appengine Shell控制台中,我克隆了项目存储库,将所有内容安装在virtualenv中,然后尝试运行,python main.py 但是返回未找到我的项目的发行版。easy_install paste然后,我使用了分发错误,但python main.py仍然无法运行。救命!

实际上,这令人沮丧。我一直想知道为什么在flask和django都在的时候,aws,gcloud和天蓝色的云没有包含金字塔教程。社区也没有这些云服务的有效教程。作为一个新手,我认为金字塔存在问题。

Joa*_*oël 5

好像这个金字塔教程已经过时了。另外,我认为它可以与App Engine标准配合使用,因为'dev_appserver.py'命令不适用于灵活环境(请注意app.yaml文件中的env:flex标记)。

此外,通过遵循以下Pyramid文档,我设法使金字塔在App Engine Standard上工作,类似于Flask应用程序:

请注意您正在配置服务器的行,如果使用此方向和端口(127.0.0.1:8080),则可以从“ Cloud Shell”预览 “本地” 查看网页。

main.py文件:

from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response


def hello_world(request):
    return Response('Hello World!')

def bye_world(request):
    return Response('Bye!')

config = Configurator()

config.add_route('hello', '/')
config.add_view(hello_world, route_name='hello')

config.add_route('newHandler', '/bye')
config.add_view(bye_world, route_name='newHandler')

app = config.make_wsgi_app()

if __name__ == '__main__':
    server = make_server('127.0.0.1', 8080, app)
    server.serve_forever()
Run Code Online (Sandbox Code Playgroud)

app.yaml

runtime: python27
api_version: 1
service: default
threadsafe: yes

handlers:
- url: /.*
  script: main.app
Run Code Online (Sandbox Code Playgroud)

在使用第三方库(金字塔)时,需要指定它们。首先创建requirements.txt文件并输入以下行:

pyramid
repoze.lru
Run Code Online (Sandbox Code Playgroud)

(repoze.lru库似乎是一个金字塔要求)

通过CLI(在本示例中名为lib)创建目录,该目录与其余文件的路径相同,并安装这些库:

mkdir lib 
pip install -t lib -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

此命令将安装“ requirements.txt”文件中列出的所有库,并将它们复制到“ lib”文件夹中。

现在,创建一个名为appengine_config.py的文件,该文件将指示App Engine部署上传“ lib”文件夹中的库,然后输入:

from google.appengine.ext import vendor

vendor.add('lib')
Run Code Online (Sandbox Code Playgroud)

附带说明一下,您不需要使用Flask进行此操作,因为Flask是App Engine中的捆绑库,因此您无需专门上载该库。

最后,要在Cloud Shell中“本地”测试应用程序,可以在CLI中运行:

python main.py
Run Code Online (Sandbox Code Playgroud)

然后使用Cloud Shell中的预览功能

要从CLI部署应用程序:

gcloud app deploy
Run Code Online (Sandbox Code Playgroud)

并使用以下命令在浏览器中查看它:

gcloud app browse -s <service_name_defined_in_app.yaml>
Run Code Online (Sandbox Code Playgroud)

在此示例中,该命令为

gcloud app browse -s default
Run Code Online (Sandbox Code Playgroud)