我在Google App Engine上运行Node.js应用,使用以下命令部署我的代码:
gcloud app deploy --stop-previous-version
我希望的行为适用于运行以前版本的所有实例,但它们似乎总是存在。有什么我想念的吗?
我意识到他们没有接收到流量,但我仍在付钱给他们,他们会造成一些背景遥测噪音。有没有更好的方法来运行此命令?
答案 0 :(得分:11)
由于后续部署尚未清除的错误灵活实例,我们在不到30天的时间内意外地破坏了我们的免费Google App Engine功能。当我们确定它是原因时,它已经扩大到四个基本上空转的同时实例。
tl; dr:部署时使用
class _MyHomePageState extends State<MyHomePage> { final MethodChannel channel = const MethodChannel("com.myproject/url"); String _url; @override initState() { super.initState(); channel.setMethodCallHandler((MethodCall call) async { debugPrint("setMethodCallHandler call = $call"); if (call.method == "openURL") { setState(() => _url = call.arguments["url"]); } }); } @override Widget build(BuildContext context) { return new Scaffold( appBar: new AppBar( title: new Text(_url ?? "No URL"), ), ); } }
标志指定版本名称。具有相同版本的现有实例将是 替换,然后下次部署。
这导致我失去了--version
的兔子洞。这是我到目前为止所发现的:
--stop-previous-version
似乎不再受支持了。它在gcloud app deploy
reference page上的标志下提到,但是如果你看一下列出所有标志的页面顶部,就无处可寻。
我尝试使用该标志进行部署以查看会发生什么,但它似乎没有任何效果。仍然创建了一个新版本,我仍然需要进入并手动删除旧实例。
gcloud-maven-plugin repo上有一个开放的Github问题,专门将此问题视为该插件的问题,但该问题似乎已被忽略。
此时我们最好的选择是向--stop-previous-version
添加--version=staging
或其他内容。该标志的参考文档似乎表明它将替换分享该标志的现有实例&#34;版本&#34;:
- version = VERSION,-v VERSION
此部署将创建或替换的应用版本。如果您没有指定版本,将为您生成一个版本。
(强调我的)
此外,Google自己的reference documentation on app.yaml(Python文档的链接,但它仍然相关)专门调出gcloud deploy app
标志为&# 34;优选&#34;在部署时指定版本的方法:
建议的方法是从app.yaml文件中删除version元素,而是使用命令行标志指定您的版本ID
答案 1 :(得分:0)
Google可能已经更新了@IAmKale的答案中引用的documentation
请注意,如果该版本正在自动缩放的服务实例上运行,则无法使用
--stop-previous-version
,并且由于自动缩放的服务实例始终在运行,因此先前的版本将继续运行。
似乎该标志仅适用于手动缩放的服务。
答案 2 :(得分:0)
据我所知,至少对于具有自动缩放功能的标准环境,旧版本保持“服务”是正常的,尽管希望它们的实例数为零(即使您进行缩放)配置指定了一个非零的最小值)。至少那是我所看到的。我认为(我希望)那些旧的“服务中”实例不会产生任何费用,因为按实例计费。
我知道以上大多数答案都是针对“灵活环境”的,但我想为那些想知道的人在此提供。
(如果Google的某人可以确认,那就太好了。)