我正在将一个非常简单的应用程序从 Google App Engine 迁移到 DigitalOcean。
该应用程序所做的所有事情:处理 AJAX 请求、查询我的 BigQuery 数据集并以 JSON 格式返回响应。
我在 virtualenv 中运行 Python 2.7,最近的 Django。
我已经安装了 Google Python Client API 模块、OAuth2Client 模块等等。
在我的一生中,我无法导入必要的模块来成功连接到 BigQuery,因此我在 GAE 上运行良好的应用在 DigitalOcean 上失败了。
# this works fine
import oauth2client
但是之后...
# this throws "global name 'appengine' is not defined"
credentials = appengine.AppAssertionCredentials(scope=_SCOPE)
我试过导入appengine:
from oauth2client import appengine
但这只是抛出
No module named appengine.api
我已经在我的 virtualenv 中检查了我的 lib/ 目录,并且 OAuth2Client 在那里。
这是我的 virtualenv 中的站点包目录:
(app_name)root@app_name:/webapps/app_name/lib/python2.7/site-packages# l
total 1104
drwxr-xr-x 2 root root 4096 May 3 00:00 apiclient
drwxr-xr-x 2 root root 4096 May 3 00:00 bigquery-2.0.17-py2.7.egg-info
-rw-r--r-- 1 root root 81577 May 3 00:00 bigquery_client.py
-rw-r--r-- 1 root root 86973 May 3 00:00 bigquery_client.pyc
-rw-r--r-- 1 root root 78673 May 3 00:00 bq.py
-rw-r--r-- 1 root root 76044 May 3 00:00 bq.pyc
drwxr-xr-x 3 root root 4096 May 3 00:00 dateutil
drwxr-xr-x 2 root root 4096 May 3 00:00 discovery
drwxrwxr-x 17 app_name users 4096 May 2 12:11 django
drwxrwxr-x 2 app_name users 4096 May 2 12:11 Django-1.6.4.dist-info
-rw-r--r-- 1 root root 239 May 2 23:20 easy-install.pth
-rw-rw-r-- 1 app_name users 126 May 2 12:10 easy_install.py
-rw-rw-r-- 1 app_name users 318 May 2 12:10 easy_install.pyc
-rw-r--r-- 1 root root 104236 May 3 00:00 gflags.py
-rw-r--r-- 1 root root 97904 May 3 00:00 gflags.pyc
-rw-r--r-- 1 root root 6977 May 3 00:00 gflags_validators.py
-rw-r--r-- 1 root root 7771 May 3 00:00 gflags_validators.pyc
drwxr-xr-x 3 root root 4096 May 3 00:00 google
drwxr-xr-x 2 root root 4096 May 3 00:00 google_api_python_client-1.2-py2.7.egg-info
drwxr-xr-x 2 root root 4096 May 3 00:00 google_apputils-0.4.0-py2.7.egg-info
-rw-r--r-- 1 root root 307 May 3 00:00 google_apputils-0.4.0-py2.7-nspkg.pth
drwxrwxr-x 6 app_name users 4096 May 2 12:13 gunicorn
drwxrwxr-x 2 app_name users 4096 May 2 12:13 gunicorn-18.0-py2.7.egg-info
drwxr-xr-x 4 root root 4096 May 2 23:20 httplib2-0.9-py2.7.egg
drwxrwxr-x 2 app_name users 4096 May 2 12:10 _markerlib
drwxr-xr-x 3 root root 4096 May 2 23:40 oauth2
drwxr-xr-x 2 root root 4096 May 2 23:40 oauth2-1.5.211-py2.7.egg-info
drwxr-xr-x 2 root root 4096 May 3 00:00 oauth2client
-rw-r--r-- 1 root root 111741 May 2 23:20 oauth2client-1.2-py2.7.egg
drwxrwxr-x 6 app_name users 4096 May 2 12:10 pip
drwxrwxr-x 2 app_name users 4096 May 2 12:10 pip-1.5.4.dist-info
-rw-rw-r-- 1 app_name users 99605 May 2 12:10 pkg_resources.py
-rw-rw-r-- 1 app_name users 106608 May 2 12:10 pkg_resources.pyc
drwxr-xr-x 2 root root 4096 May 3 00:00 python_dateutil-1.5-py2.7.egg-info
drwxr-xr-x 2 root root 4096 May 3 00:00 python_gflags-2.0-py2.7.egg-info
drwxr-xr-x 3 root root 4096 May 3 00:00 pytz
drwxr-xr-x 2 root root 4096 May 3 00:00 pytz-2014.2-py2.7.egg-info
drwxrwxr-x 2 app_name users 4096 May 2 12:22 setproctitle-1.1.8-py2.7.egg-info
-rwxrwxr-x 1 app_name users 53539 May 2 12:22 setproctitle.so
drwxrwxr-x 4 app_name users 4096 May 2 12:10 setuptools
drwxrwxr-x 2 app_name users 4096 May 2 12:10 setuptools-2.2.dist-info
drwxr-xr-x 3 root root 4096 May 2 23:43 simplejson
drwxr-xr-x 2 root root 4096 May 2 23:43 simple_json
drwxr-xr-x 2 root root 4096 May 2 23:43 simple_json-1.1-py2.7.egg-info
drwxr-xr-x 2 root root 4096 May 2 23:43 simplejson-3.4.1-py2.7.egg-info
-rw-r--r-- 1 root root 18568 May 3 00:00 table_formatter.py
-rw-r--r-- 1 root root 25967 May 3 00:00 table_formatter.pyc
drwxr-xr-x 2 root root 4096 May 2 23:40 tests
drwxr-xr-x 2 root root 4096 May 3 00:00 uritemplate
如果我进入oauthclient2,我会看到 appengine.py:
(app_name)root@readrboard-events:/webapps/app_name/lib/python2.7/site-packages/oauth2client# l
total 388
-rw-r--r-- 1 root root 1044 May 3 00:00 anyjson.py
-rw-r--r-- 1 root root 536 May 3 00:00 anyjson.pyc
-rw-r--r-- 1 root root 32524 May 3 00:00 appengine.py
-rw-r--r-- 1 root root 37284 May 3 00:00 appengine.pyc
-rw-r--r-- 1 root root 44282 May 3 00:00 client.py
-rw-r--r-- 1 root root 48404 May 3 00:00 client.pyc
-rw-r--r-- 1 root root 4405 May 3 00:00 clientsecrets.py
-rw-r--r-- 1 root root 4440 May 3 00:00 clientsecrets.pyc
-rw-r--r-- 1 root root 10233 May 3 00:00 crypt.py
-rw-r--r-- 1 root root 11970 May 3 00:00 crypt.pyc
-rw-r--r-- 1 root root 3833 May 3 00:00 django_orm.py
-rw-r--r-- 1 root root 5482 May 3 00:00 django_orm.pyc
-rw-r--r-- 1 root root 3160 May 3 00:00 file.py
-rw-r--r-- 1 root root 4291 May 3 00:00 file.pyc
-rw-r--r-- 1 root root 3038 May 3 00:00 gce.py
-rw-r--r-- 1 root root 3207 May 3 00:00 gce.pyc
-rw-r--r-- 1 root root 213 May 3 00:00 __init__.py
-rw-r--r-- 1 root root 416 May 3 00:00 __init__.pyc
-rw-r--r-- 1 root root 3227 May 3 00:00 keyring_storage.py
-rw-r--r-- 1 root root 3892 May 3 00:00 keyring_storage.pyc
-rw-r--r-- 1 root root 11379 May 3 00:00 locked_file.py
-rw-r--r-- 1 root root 12863 May 3 00:00 locked_file.pyc
-rw-r--r-- 1 root root 13935 May 3 00:00 multistore_file.py
-rw-r--r-- 1 root root 16386 May 3 00:00 multistore_file.pyc
-rw-r--r-- 1 root root 5548 May 3 00:00 old_run.py
-rw-r--r-- 1 root root 4981 May 3 00:00 old_run.pyc
-rw-r--r-- 1 root root 8344 May 3 00:00 tools.py
-rw-r--r-- 1 root root 8723 May 3 00:00 tools.pyc
-rw-r--r-- 1 root root 5670 May 3 00:00 util.py
-rw-r--r-- 1 root root 5853 May 3 00:00 util.pyc
-rw-r--r-- 1 root root 3368 May 3 00:00 xsrfutil.py
-rw-r--r-- 1 root root 2928 May 3 00:00 xsrfutil.pyc
1)我做错了什么?为什么appengine没有加载?
2) 我也找不到其他方法来向 Google API 声明我的凭据。如何使用我的 crd 连接到 Google API 以从非 Google App Engine 服务器查询 BigQuery?