在 Dart Globe 中设置和访问环境变量

问题描述 投票:0回答:1

我正在尝试在 Globe 平台上为 Dart 服务器应用程序设置环境变量。

为了隔离问题,我创建了以下 Shelf 服务器应用程序:

import 'dart:io';
import 'package:shelf/shelf.dart';
import 'package:shelf/shelf_io.dart';
import 'package:shelf_router/shelf_router.dart';

final _router = Router()..get('/', _rootHandler);

Response _rootHandler(Request req) {
  final keyEnv = Platform.environment['KEY'];
  const keyString = String.fromEnvironment('KEY');
  print('keyEnv: $keyEnv');
  print('keyString: $keyString');
  return Response.ok('keyEnv: $keyEnv\nkeyString: $keyString');
}

void main(List<String> args) async {
  final ip = InternetAddress.anyIPv4;
  final handler =
      Pipeline().addMiddleware(logRequests()).addHandler(_router.call);
  final port = int.parse(Platform.environment['PORT'] ?? '8080');
  final server = await serve(handler, ip, port);
  print('Server listening on port ${server.port}');
}

在 Mac 上本地运行,如下所示:

# terminal 1
dart run --define=KEY=hello bin/server.dart

# terminal 2
curl http://localhost:8080

我在 1 号航站楼得到这个结果:

Server listening on port 8080
keyEnv: null
keyString: hello

这与我在 Stack Overflow 上的相关问题一致。

然后我在 Globe 上部署了 我的测试应用程序的 GitHub 版本,并像这样设置环境变量:

但是,当我访问Globe部署版本时,这是响应:

keyEnv: null
keyString: 

为什么

KEY
环境变量在任何地方都不可用?我怎样才能访问它? Globe 文档 表明我应该能够使用
Platform.environment
,但情况似乎并非如此。

dart environment-variables dart-globe
1个回答
0
投票

根据https://api.flutter.dev/flutter/package-platform_platform/Platform/environment.html.

返回的环境是一个不可修改的映射,其内容是在第一次使用时从操作系统检索的。

我认为你不能直接修改它。

我自己打印了

Platform.environment
。我认为您可以将
export KEY=hello
附加到您的 .zshrc 文件中。或者在终端中执行
export KEY=hello
。它对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.