2015-12-11 44 views
3

我爲AppEngine配置了Dart託管虛擬機,如tutorial中所述。它已經過時了,仍然使用現在刪除的gcloud preview app run而不是dev_appserver.py。我發現使用dev_appserver.py成功地爲虛擬機箭然而其他人,但我得到了以下錯誤:gcloud dev_appserver.py在啓動Dart託管虛擬機時出錯

$ dev_appserver.py app.yaml --runtime custom 
INFO  2015-12-11 12:19:50,907 application_configuration.py:431] No version specified. Generated version id: 20151211t121950 
INFO  2015-12-11 12:19:50,908 devappserver2.py:769] Skipping SDK update check. 
INFO  2015-12-11 12:19:50,939 api_server.py:205] Starting API server at: http://localhost:36858 
INFO  2015-12-11 12:19:50,951 api_server.py:648] Applying all pending transactions and saving the datastore 
INFO  2015-12-11 12:19:50,951 api_server.py:651] Saving search indexes 
Traceback (most recent call last): 
    File "/opt/google/cloud-sdk/platform/google_appengine/dev_appserver.py", line 83, in <module> 
    _run_file(__file__, globals()) 
    File "/opt/google/cloud-sdk/platform/google_appengine/dev_appserver.py", line 79, in _run_file 
    execfile(_PATHS.script_file(script_name), globals_) 
    File "/opt/google/cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 1040, in <module> 
    main() 
    File "/opt/google/cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 1033, in main 
    dev_server.start(options) 
    File "/opt/google/cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 824, in start 
    self._dispatcher.start(options.api_host, apis.port, request_data) 
    File "/opt/google/cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/dispatcher.py", line 194, in start 
    _module.start() 
    File "/opt/google/cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/module.py", line 1548, in start 
    self._add_instance() 
    File "/opt/google/cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/module.py", line 1700, in _add_instance 
    expect_ready_request=True) 
    File "/opt/google/cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/custom_runtime.py", line 83, in new_instance 
    assert self._runtime_config_getter().custom_config.custom_entrypoint 
AssertionError 

我Dockerfile到位,並app.yaml中是正確的。我在IntelliJ中創建了一個示例Dart AppEngine項目,並使用本教程檢查了創建的文件的內容。

This post from the e-mail list建議使用--custom_entrypoint選項。我試過了,但得到了這個錯誤信息。在Dart入口點被調用之前,似乎端口被應用服務器所聲稱。

$ dev_appserver.py app.yaml --custom_entrypoint "dart bin/server.dart --port=8080" 
INFO  2015-12-11 12:41:13,334 application_configuration.py:431] No version specified. Generated version id: 20151211t124113 
INFO  2015-12-11 12:41:13,334 devappserver2.py:769] Skipping SDK update check. 
INFO  2015-12-11 12:41:13,363 api_server.py:205] Starting API server at: http://localhost:44617 
INFO  2015-12-11 12:41:13,375 dispatcher.py:197] Starting module "default" running at: http://localhost:8080 
INFO  2015-12-11 12:41:13,376 admin_server.py:116] Starting admin server at: http://localhost:8000 
Unhandled exception: 
SocketException: Failed to create server socket (OS Error: Address already in use, errno = 98), address = 0.0.0.0, port = 8080 
#0  _NativeSocket.bind.<anonymous closure> (dart:io-patch/socket_patch.dart:494) 
#1  _rootRunUnary (dart:async/zone.dart:914) 
#2  _CustomZone.runUnary (dart:async/zone.dart:810) 
#3  _Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:502) 
#4  _Future._propagateToListeners (dart:async/future_impl.dart:585) 
#5  _Future._completeWithValue (dart:async/future_impl.dart:376) 
#6  _Future._asyncComplete.<anonymous closure> (dart:async/future_impl.dart:430) 
#7  _rootRun (dart:async/zone.dart:907) 
#8  _CustomZone.run (dart:async/zone.dart:802) 
#9  _CustomZone.bindCallback.<anonymous closure> (dart:async/zone.dart:735) 
#10  _microtaskLoop (dart:async/schedule_microtask.dart:43) 
#11  _microtaskLoopEntry (dart:async/schedule_microtask.dart:52) 
#12  _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:96) 
#13  _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:151) 
^CTraceback (most recent call last): 
    File "/opt/google/cloud-sdk/bin/dev_appserver.py", line 35, in <module> 
    main() 
    File "/opt/google/cloud-sdk/bin/dev_appserver.py", line 29, in main 
    os.path.join('platform', 'google_appengine'), 'dev_appserver.py', *args) 
    File "/opt/google/cloud-sdk/bin/bootstrapping/bootstrapping.py", line 45, in ExecutePythonTool 
    execution_utils.ArgsForPythonTool(_FullPath(tool_dir, exec_name), *args)) 
    File "/opt/google/cloud-sdk/bin/bootstrapping/bootstrapping.py", line 86, in _ExecuteTool 
    execution_utils.Exec(args + sys.argv[1:], env=_GetToolEnv()) 
    File "/opt/google/cloud-sdk/lib/googlecloudsdk/core/execution_utils.py", line 209, in Exec 
INFO  2015-12-11 12:41:37,298 shutdown.py:45] Shutting down. 
    ret_val = p.wait() 
    File "/usr/lib64/python2.7/subprocess.py", line 1384, in wait 
INFO  2015-12-11 12:41:37,298 api_server.py:648] Applying all pending transactions and saving the datastore 
    pid, sts = _eintr_retry_call(os.waitpid, self.pid, 0) 
    File "/usr/lib64/python2.7/subprocess.py", line 476, in _eintr_retry_call 
    return func(*args) 
KeyboardInterruptINFO  2015-12-11 12:41:37,298 api_server.py:651] Saving search indexes 
+0

您的app.yaml的外觀如何?你傳遞了custom_runtime標誌嗎? https://groups.google.com/a/dartlang.org/forum/#!msg/cloud/J6LsrVVdJ6o/WTHbG_v0CQAJ –

+0

我現在沒有app.yaml,但它是默認的'runtime:自定義,vm:true,api_version:1'。我也嘗試過'--custom_entrypoint'選項,但是失敗了,因爲'dev_appserver'已經聲明瞭端口8080(帶有默認模塊的東西),所以Dart無法使用它。我會爲此儘快添加錯誤日誌,現在我在另一臺機器上。 –

+0

@GünterZöchbauer我爲您的建議方法添加了錯誤消息。 –

回答

1

該教程已過時,您不能再執行此操作。

原因是您正在使用自定義運行時(本教程中的app.yamlruntime: custom)。

自定義運行時不能再在開發服務器上運行!(請參閱this answer

可以運行該應用程序,但必須部署到App Engine服務器。

+0

這是不正確的,並且[正確答案](http://stackoverflow.com/a/34279138/4270992)剛剛發佈到您鏈接的問答。一般而言,在[官方文檔](https://cloud.google.com/appengine/docs/managed-vms/custom-runtimes)上的自述文件中信任一次性評論是不正確的。 – Nick

+0

如果官方文檔對如何運行自定義運行時dev_appengine.py進行說明(任何事情,任何事情),將會有所幫助。此外--runtime標誌似乎是新的。我無法在1.9.28中找到它。 – user2771609

0

我認爲這裏要做的正確的事情是指定一個運行您的dart服務器應用程序的自定義入口點,因爲--runtime僅適用於特定支持的兼容運行時。請參閱dev_appserver.py的錯誤輸出:

google.appengine.tools.devappserver2.errors.InvalidAppConfigError: 
Must set either --runtime or --custom_entrypoint. 
For a standard runtime, set the --runtime flag with one of 
['java-compat', 'java', 'php55', 'python', 'custom', 
'python-compat', 'java7', 'python27', 'go']. 
For a custom runtime, set the --custom_entrypoint with a command to start your app. 
+0

你可以詳細說明--custom_entrypoint是做什麼的嗎? dev_appserver.py --help簡單地解釋術語:「指定自定義運行時模塊的入口點」。入口點是什麼意思?它是一個文件嗎?這是一個程序嗎?它是碼頭集裝箱中的程序嗎?運行dev_appserver.py的機器?該計劃應該做什麼? – user2771609

+0

聽起來就像是一個命令,它產生一個監聽相應端口的進程,比如'node server.js'或'gunicorn -b localhost:{port} mymodule:application'(第二個顯示使用{port}作爲命令中的模板,在運行之前它將被填充適當的值)。 – Nick

+0

該過程在連接到端口後應該做些什麼?這個過程與我的Dockerfile指定的docker鏡像有什麼關係?我應該啓動Docker容器來實現這個過程嗎? – user2771609

相關問題