Go语言 dev_appserver.py错误参数错误:应用程序不能为空

46scxncf  于 2023-02-01  发布在  Go
关注(0)|答案(2)|浏览(125)
    • 大家好**

上下文:我在2021年年底安装了这个dev_appserver,当我再次尝试安装它时,我遇到了奇怪的错误。BadArgumentError: app must not be empty.
到目前为止,我已经解决了相当多的错误,这就是我所处的位置:

  • 已安装JDK 1.11+(适用于Cloud Datastore Emulator
  • 已安装Golang 1.15+(用于gopsdev_appserver.py - go build
  • 云组件:

我的dev_appserver是这样运行的:

export DATASTORE_DATASET=dev8celbux
export DATASTORE_PROJECT_ID=dev8celbux
export DATASTORE_USE_PROJECT_ID_AS_APP_ID=true
dev_appserver.py --enable_console --admin_port=8001 --port=8081 --go_debugging=true --support_datastore_emulator=true --datastore_path=./datastore/local_db.bin setuptables-app.yaml

INFO     2022-09-09 13:26:30,233 devappserver2.py:317] Skipping SDK update check.
INFO     2022-09-09 13:26:30,250 datastore_emulator.py:156] Starting Cloud Datastore emulator at: http://localhost:58946
INFO     2022-09-09 13:26:32,381 datastore_emulator.py:162] Cloud Datastore emulator responded after 2.131000 seconds
INFO     2022-09-09 13:26:32,381 <string>:384] Starting API server at: http://localhost:59078
INFO     2022-09-09 13:26:32,384 <string>:374] Starting gRPC API server at: http://localhost:59079
INFO     2022-09-09 13:26:32,394 instance_factory.py:184] Building with dependencies from go.mod.
INFO     2022-09-09 13:26:32,397 dispatcher.py:280] Starting module "setuptables" running at: http://localhost:8081
INFO     2022-09-09 13:26:32,397 admin_server.py:70] Starting admin server at: http://localhost:8001
WARNING  2022-09-09 13:26:32,398 devappserver2.py:414] No default module found. Ignoring.
2022/09/09 13:26:35 STARTING
INFO     2022-09-09 13:26:37,220 instance.py:294] Instance PID: 9656

当我尝试查看位于localhost:8001/datastore的本地数据存储中的内容时出现此错误。

Traceback (most recent call last):
  File "C:\Users\user\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\lib\webapp2\webapp2\__init__.py", line 1526, in __call__
    rv = self.handle_exception(request, response, e)
  File "C:\Users\user\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\lib\webapp2\webapp2\__init__.py", line 1520, in __call__
    rv = self.router.dispatch(request, response)
  File "C:\Users\user\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\lib\webapp2\webapp2\__init__.py", line 1270, in default_dispatcher
    return route.handler_adapter(request, response)
  File "C:\Users\user\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\lib\webapp2\webapp2\__init__.py", line 1094, in __call__
    return handler.dispatch()
  File "C:\Users\user\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\tools\devappserver2\admin\admin_request_handler.py", line 88, in dispatch
    super(AdminRequestHandler, self).dispatch()
  File "C:\Users\user\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\lib\webapp2\webapp2\__init__.py", line 588, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "C:\Users\user\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\lib\webapp2\webapp2\__init__.py", line 586, in dispatch
    return method(*args, **kwargs)
  File "C:\Users\user\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\tools\devappserver2\admin\datastore_viewer.py", line 661, in get
    kinds = self._get_kinds(namespace)
  File "C:\Users\user\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\tools\devappserver2\admin\datastore_viewer.py", line 597, in _get_kinds
    return sorted([x.kind_name for x in q.run()])
  File "C:\Users\user\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\db\__init__.py", line 2077, in run
    raw_query = self._get_query()
  File "C:\Users\user\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\db\__init__.py", line 2482, in _get_query
    _app=self._app)
  File "C:\Users\user\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\api\datastore.py", line 1371, in __init__
    self.__app = datastore_types.ResolveAppId(_app)
  File "C:\Users\user\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\api\datastore_types.py", line 238, in ResolveAppId
    ValidateString(app, 'app', datastore_errors.BadArgumentError)
  File "C:\Users\user\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\api\datastore_types.py", line 186, in ValidateString
    raise exception('%s must not be empty.' % name)
BadArgumentError: app must not be empty.

我发现这在某种程度上与APPLICATION_ID环境变量丢失有关。设置该变量后,我可以查看数据库页面。但是.将数据写入模拟器时没有出现错误(逐行调试以确认创建了&local_db.bin),在查看数据时,什么都没有。我成功地写了15个实体从代码的Angular 来看。但是没有出现在管理页面上。我认为这是由于手动设置的APPLICATION_ID,因为我没有这样做之前。也许应该自动不知何故。我在想这个环境变量也许可以做到这一点:export DATASTORE_USE_PROJECT_ID_AS_APP_ID=true,但似乎没有改变任何东西。

    • 在**调用实体创建之前:

    • 在**调用实体创建之后:

我这样写数据,毫无疑问这是正确的。

ctx, err := appengine.Namespace(appengine.BackgroundContext(), "celbux101")
...
userKeyOut, err := datastore.Put(ctx, userKey, &F1_4{...})

此外,还查看了default和指定的命名空间(celbux101):

超级难倒了。:(感谢帮助!
我真的觉得这可能和APPLICATION_ID有关

csga3l58

csga3l581#

是的!

...我设法找到了一个解决方案!正如所怀疑的那样,数据被正确地写入,正如逐行调试和local_db.bin的创建所确认的那样。问题是dev_appserver的UI无法显示数据库实体,因为APPLICATION_ID不正确或丢失,正如所扣除的那样。
我发现dev_appserver的UI使用APPLICATION_IDnamespace来决定在哪里查找实体,而且dev_appserver有自己的默认APPLICATION_ID
溶液
修复方法是在运行dev_appserver.py之前导出环境变量。
export APPLICATION_ID=dev~None
这个神奇的导出可以让一切按预期工作。你可以在界面的左上角查看UI试图使用的APPLICATION_ID

**EDIT:**我刚在一台新计算机上运行了此程序,希望添加此程序以供将来参考:

如果您获得的是IOError: emulator did not respond within 10s
安装Python 27并添加到您的路径中!(与您捆绑的Python一起)

nwsw7zdq

nwsw7zdq2#

Google's documentation开始

export DATASTORE_DATASET=my-project-id
export DATASTORE_EMULATOR_HOST=::1:8432
export DATASTORE_EMULATOR_HOST_PATH=::1:8432/datastore
export DATASTORE_HOST=http://::1:8432
export DATASTORE_PROJECT_ID=my-project-id

这将显示您的项目名称(而不是dev~None

相关问题