我正在尝试在 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
然后我在 Globe 上部署了 我的测试应用程序的 GitHub 版本,并像这样设置环境变量:
但是,当我访问Globe部署版本时,这是响应:
keyEnv: null
keyString:
为什么
KEY
环境变量在任何地方都不可用?我怎样才能访问它? Globe 文档 表明我应该能够使用 Platform.environment
,但情况似乎并非如此。
根据https://api.flutter.dev/flutter/package-platform_platform/Platform/environment.html.
返回的环境是一个不可修改的映射,其内容是在第一次使用时从操作系统检索的。
我认为你不能直接修改它。
我自己打印了
Platform.environment
。我认为您可以将 export KEY=hello
附加到您的 .zshrc 文件中。或者在终端中执行 export KEY=hello
。它对我有用。