非常に単純なアプリを 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/ dir を確認したところ、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 にアサートする別の方法も見つかりません。Crds を使用して Google API に接続し、Google App Engine 以外のサーバーから BigQuery にクエリを実行するにはどうすればよいですか?