Ang*_*Koh 7 google-app-engine python-2.7
我正在关注Google的Mobile Shopping Assistant示例中的示例,该示例要求我根据此链接导入数据.
我尝试了根据示例的步骤(所有示例代码都是vanilla,我没有更改任何东西,除了修复警告以使用最新的Gradle构建版本)
我相信我错过了一个未在示例中说明的重要步骤.有人可以提供一些见解我错误地做了哪些步骤?
以下是我所做的步骤
运行cmd"appcfg.py upload_data --config_file bulkloader.yaml --url = http:// localhost:8080/remote_api --filename places.csv --kind = Place -e myEmailAddress@gmail.com".
该命令应该在数据存储区中插入2行(places.csv包含两个条目)
Run Code Online (Sandbox Code Playgroud)10:07 AM Uploading data records. [INFO ] Logging to bulkloader-log-20151020.100728 [INFO ] Throttling transfers: [INFO ] Bandwidth: 250000 bytes/second [INFO ] HTTP connections: 8/second [INFO ] Entities inserted/fetched/modified: 20/second [INFO ] Batch Size: 10 Error 302: --- begin server output --- --- end server output ---
然后我转到" http:// localhost:8080/admin/buildsearchindex ",显示"MaintenanceTasks completed".
接下来我转到" http:// localhost:8080/_ah/admin "但它会显示
数据存储区在Empty命名空间中没有实体.您需要添加数据
以编程方式,然后您可以使用此工具来查看和编辑它.
ste*_*ich 13
我有同样的问题,但不是本地开发人员服务器,但使用已部署的版本.在几乎疯了之后,我找到了使用appcfg上传数据的解决方法.在我的情况下,我注意到尝试以下时
输入不适合我:
gcloud auth login
appcfg.py upload_data --config_file bulkloader.yaml --url=http://<yourproject>.appspot.com/remote_api --filename places.csv --kind=Place --email=<you@gmail.com>
Run Code Online (Sandbox Code Playgroud)
输出错误:
11:10 AM Uploading data records.
[INFO ] Logging to bulkloader-log-20160108.111007
[INFO ] Throttling transfers:
[INFO ] Bandwidth: 250000 bytes/second
[INFO ] HTTP connections: 8/second
[INFO ] Entities inserted/fetched/modified: 20/second
[INFO ] Batch Size: 10
Error 302: --- begin server output ---
--- end server output ---
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,我没有被要求在第二个命令期间再次验证自己,但显然,appcfg仍然无法验证我的帐户.我正在使用Win7,Python 2.7,Python Google App Engine SDK,包括来自Google Cloud SDK的appcfg.py和gcloud,如果我做对了的话.
但是,在https://cloud.google.com/container-registry/docs/auth上显示您可以使用gcloud命令打印出访问令牌,然后将其手动插入适用于我的appcfg命令中
输入为我工作:
gcloud auth login
gcloud auth print-access-token
Run Code Online (Sandbox Code Playgroud)
这会打印出可以与appcfg一起使用的访问令牌
appcfg.py upload_data --oauth2_access_token=<oauth2_access_token> --config_file bulkloader.yaml --url=http://<yourproject>.appspot.com/remote_api --filename places.csv --kind=Place --email=<you@gmail.com>
Run Code Online (Sandbox Code Playgroud)
成功上传数据的输出:
10:42 AM Uploading data records.
[INFO ] Logging to bulkloader-log-20160108.104246
[INFO ] Throttling transfers:
[INFO ] Bandwidth: 250000 bytes/second
[INFO ] HTTP connections: 8/second
[INFO ] Entities inserted/fetched/modified: 20/second
[INFO ] Batch Size: 10
[INFO ] Opening database: bulkloader-progress-20160108.104246.sql3
[INFO ] Connecting to <yourproject>.appspot.com/remote_api
[INFO ] Starting import; maximum 10 entities per post
.
[INFO ] 3 entities total, 0 previously transferred
[INFO ] 3 entities (4099 bytes) transferred in 1.7 seconds
[INFO ] All entities successfully transferred
Run Code Online (Sandbox Code Playgroud)
我希望这有助于任何人试图解决这个问题.对我来说,目前尚不清楚这个问题的根源是什么,但这是一个适合我的解决方法.
顺便说一下,我在mac上观察到同样的问题.
这是我通过测试发现的。我最初执行了相同的步骤并得到了相同的错误,但输出中值得注意的是条目INFO client.py:669 access_token is expired:
MobileAssistant-Data> appcfg.py upload_data --config_file bulkloader.yaml --url=http://localhost:8080/remote_api --filename places.csv --kind=Place -e myEmailAddress@gmail.com
05:12 PM Uploading data records.
[INFO ] Logging to bulkloader-log-20151112.171238
[INFO ] Throttling transfers:
[INFO ] Bandwidth: 250000 bytes/second
[INFO ] HTTP connections: 8/second
[INFO ] Entities inserted/fetched/modified: 20/second
[INFO ] Batch Size: 10
2015-11-12 17:12:38,466 INFO client.py:669 access_token is expired. Now: 2015-11-12 22:12:38.466000, token_expiry: 2015-11-06 01:33:21
Error 302: --- begin server output ---
Run Code Online (Sandbox Code Playgroud)
这看起来有点像我在开发服务器的远程 API 处理程序中看到的问题,该问题在ClientLogin 被弃用后出现(但在 Python SDK 中)。为了测试,我编辑了 build.gradle 以使用最新的 SDK 版本(从 1.9.28 到 1.9.28)并再次运行它:
MobileAssistant-Data> appcfg.py upload_data --config_file bulkloader.yaml --url=http://localhost:8080/remote_api --filename places.csv --kind=Place -e myEmailAddress@gmail.com
05:16 PM Uploading data records.
[INFO ] Logging to bulkloader-log-20151112.171615
[INFO ] Throttling transfers:
[INFO ] Bandwidth: 250000 bytes/second
[INFO ] HTTP connections: 8/second
[INFO ] Entities inserted/fetched/modified: 20/second
[INFO ] Batch Size: 10
2015-11-12 17:16:15,177 INFO client.py:669 access_token is expired. Now: 2015-11-12 22:16:15.177000, token_expiry: 2015-11-06 01:33:21
2015-11-12 17:16:15,565 INFO client.py:669 access_token is expired. Now: 2015-11-12 22:16:15.565000, token_expiry: 2015-11-06 01:33:21
2015-11-12 17:16:15,573 INFO client.py:571 Refreshing due to a 401 (attempt 1/2)
2015-11-12 17:16:15,575 INFO client.py:797 Refreshing access_token
2015-11-12 17:16:16,039 INFO client.py:571 Refreshing due to a 401 (attempt 2/2)
2015-11-12 17:16:16,040 INFO client.py:797 Refreshing access_token
... (ad infinitum)
Run Code Online (Sandbox Code Playgroud)
此输出现在准确反映了 Python Remote API 问题。因此,Java Remote API 似乎也存在同样的问题(身份验证检查尚未正确更新以使用新的身份验证方案)。
Python 中的解决方法是手动编辑 SDK 源代码并删除身份验证检查。我怀疑 Java SDK 也需要类似的 hack。但这并不那么简单,因为 SDK 需要从源代码重新构建。
如果我遇到其他任何问题,我会用我的发现更新这个答案。请注意,这对于已部署的应用程序应该可以完美工作- 只有开发服务器受到影响。
更新:
罪魁祸首是com/google/apphosting/utils/remoteapi/RemoteApiServlet.java中的管理员检查,与上述 Python SDK 中的问题相同。不幸的是,您无法从源代码轻松重建 SDK,因为 build.xml 中的构建目标仅包含“jsr107cache”,而构建的其余部分是通过预先生成的二进制文件完成的。看来我们只能等到未来版本中修复这个问题,但现在我将更新公共错误。
目前,我建议坚持使用文档并仅使用已部署的应用程序版本进行remote_api 上传。
| 归档时间: |
|
| 查看次数: |
1486 次 |
| 最近记录: |