通过分别为标准环境和灵活环境配置app.yaml,我可以在Google云中部署php应用程序。
“ app.yaml”(对于标准环境):
runtime: php55
api_version: 1
threadsafe: true
handlers:
- url: /.*
script: helloworld.php
- url: /fileUpload.php
script: fileUpload.php
“ app.yaml”以实现灵活的环境:
runtime: php55
env: flex # flexible env
api_version: 1
threadsafe: true
handlers:
- url: /.*
script: helloworld.php
- url: /fileUpload.php
script: fileUpload.php
现在我想在单个应用程序中同时使用两种环境。
1. helloworld.php URL的标准环境
2. fileUpload.php URL的灵活环境
所以请建议我这个应用程序的结构。
在此先感谢
我尝试使用以下结构,但无法正常工作。.
|-dispatch.yaml
|-standard
|-app.yaml
|-helloworld.php
|-flexible
|-app.yaml
|-fileUpload.php
dispatch.yaml代码:
dispatch:
- url: "*/fileupload/*"
service: flex-module
- url: "/.*"
service: default
如何在单个应用程序中同时利用标准和灵活的环境?
示例:
域:example.com
如果我们访问网址“ example.com/”或“ example.com/helloworld.php”,则它将使用标准环境。
如果我们访问url'example.com/fileupload.php',那么它将使用灵活的环境。
是否可以处理以上两个条件?
答案 0 :(得分:1)
Google Cloud上的环境是每个应用程序。如果要部署在不同的环境中,它们必须是分开的应用程序,或者至少是相同的副本在不同的微服务上。对于两个不同的环境,不是一个部署。
这是用于标准环境,但是是相同的概念https://cloud.google.com/appengine/docs/standard/php/microservices-on-app-engine 每个模块或微服务本身就是一个应用程序。因为它除了管理数据库等共享资源外,还管理自己的资源。
答案 1 :(得分:0)
是的,有可能:您将拥有一个带有2个服务,一个标准和一个flex的GAE应用程序(即一个GCP项目)。您几乎是朝这个方向开始的,但是您错过了一些事情。
运行时不正确,并且您缺少(非默认)flex-module
app.yaml
的服务命名。来自General settings:
运行时:php
此设置是必需的。它是App Engine语言的名称 此应用程序使用的运行时。要指定PHP,请使用 php 。其他 运行时可用;请参阅每种语言的文档以了解 更多信息。
服务:service_name
如果创建服务,则为必需。对于默认服务是可选的。每 服务,每个版本必须有一个名称。名称可以包含数字, 字母和连字符。长度不能超过63个字符,并且 不能以连字符开头或结尾。为每个选择唯一的名称 服务和每个版本。不要在服务和 版本。
您也可以将standard env configs放到该文件中-当前会忽略它们,但以防万一检查变得更加严格。也许偷看了与How to tell if a Google App Engine documentation page applies to the standard or the flexible environment相关的某种方式
runtime: php
env: flex # flexible env
service: flex-module
您也应该检查The runtime_config部分,它似乎是强制性的,但是我不是PHP用户,我不知道在这里建议什么:
您必须在
document_root
部分中配置runtime_config
, 例如上面的示例。
您需要注意dispatch.yaml
的内容。 flex服务的模式与您为此服务选择的URL不匹配,需要匹配。您还可以在末尾放下默认服务模式-与指定路由模式不匹配的任何内容都将转到默认服务。
dispatch:
- url: "*/fileUpload.php"
service: flex-module
注意:我一直在dispatch.yaml
中使用目录模式-即- url: "*/some_dir/*"
-绝不仅是特定文件,我不是100%肯定上述内容会起作用,如果不需要的话,可能需要一些调整。
在默认服务的app.yaml
中,您可以删除上载处理程序-由flex-module
处理。只是化妆品。
还要小心部署-您有3个可部署项:2个服务(通过部署相应的app.yaml
文件进行部署)和必须专门部署的dispatch.yaml
文件。 3个.yaml
文件的任何组合都可以包含在一个部署命令中(但这很方便,实际上每个文件实际上都是单独部署的):
gcloud app deploy standard/app.yaml flexible/app.yaml dispatch.yaml