2017-11-19 8 views
1

FlaskとGoogle Datastoreを使用して自分自身をGoogle Cloudにする基本的なWebアプリケーションを作成しようとしています。私のアプリをデプロイするとエラー500が出ますが、PythonがDatastore:ImportError: No module named cloudをインポートすることはできません。ここでgoogle.cloudからデータストアをインポートできません

は私app.yamlです:私のmain.py開始が好き

runtime: python27 
api_version: 1 
threadsafe: true 

handlers: 
- url: .* 
    script: main.app 

libraries: 
- name: jinja2 
    version: "2.6" 
- name: markupsafe 
    version: "0.15" 
- name: flask 
    version: 0.12 

は次のとおりです。

from __future__ import absolute_import 

# Standard imports 
import time 
import logging 
import json 
import threading 

# Flask framework 
from flask import request 
from flask import Flask 

# Google Cloud features 
from google.cloud import datastore 
# the following replaces requests 
from google.appengine.api import urlfetch 

は最後に、私のrequirements.txtは以下の通りです:

Flask 
google-cloud 
click 

私は私のアプリを展開する場合( gcloud app deployを使用)およびge私のサイトには、私は私のエラー500を取得します。

from google.cloud import datastore私は彼らのチュートリアルで何をしているので、なぜ私は使用することができません理解していない...私は何かを見つける必要があります。

ご協力いただければ幸いです。

答えて

2

Installing the client libraryから:

pip install --upgrade google-cloud-datastore 

あなたは(あなたのimport文を一致させる)必要があるクライアントライブラリはgoogle-cloud-datastoreですが、あなたはあなたのrequirements.txtファイルに記載されていることはありません。

サイドノート:あなたのapp.yamlファイルあなたは一般的なものを選択するための具体的な理由を持っていない場合は既にアプリであなたのSDKに含まれ、使用可能な最適化されたGoogle Datastore NDB Client Libraryライブラリを持っているため、標準のenv GAEアプリ1、、(であることを示しています代わりに)。

+0

私は本当に理解していないとあなたが片付けるかもしれない何かがあります。アプリケーションをデプロイするときに 'requirements.txt'が使われますか?私の理解では、 '/ lib'で利用可能なモジュールだけが重要です...しかし、それは私が確信していることです。また 'appengine_config.py'ファイルを追加して' lib'にファイルを追加し、Datastoreが正しく動作するようにしましたが、私が何をやっているのか本当に理解したいと思っています。 –

+0

'requirements.txt'ファイルは、標準のenvアプリケーションのデプロイ時には使用されません。デプロイメントの場合、アプリケーションディレクトリ(およびもしあれば' skip_files'設定)だけが見えます。しかし、このようなファイルは、サードパーティ製ライブラリのベンダリング時に標準のenvで使用することができます - そのファイルをapp dir(通常は 'lib'と呼ばれます)にすべてインストールするための単一の' pip '呼び出しに引数として渡します。必須ではありません(手動の 'pip'呼び出しを代わりに使用することもできます)。あなたがしたので私はそれを言いました。しかし、そのようなファイルは、GAEフレックス環境(別の獣)で使用されます。 –

+0

だから、私がDatastoreを使いたいのであれば、pipを 'lib'フォルダにインストールする必要があります。また、モジュールを '/ lib'にインストールした後、私は** appengine_config.py'ファイルを使ってベンダーを設定することができますか? –

4

標準環境を使用しているため、env: flexは指定しません。 Hereこれはflex yamlについて記述されており、hereは標準yamlには現れません。

標準環境ではgoogle-cloudがサポートされていないため、これは重要です。 google-cloud’s repository

これらのライブラリは現在、Google App Engineの標準

を実行していないNDB ClientについてダンCornilescu言及リンクは、標準的な環境のためにoficialソリューションであり、いくつかの例がoficialドキュメントに記載されています:

https://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/appengine/standard/ndbhttps://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/appengine/standard/multitenancy

+1

この回答をありがとう、それは多くを説明します。しかし、それを使うにはどうすればいいですか? –

+1

Dan Cornilescuが[NDB Client](https://cloud.google.com/appengine/docs/python/ndb/)について言及しているリンクは、標準的な環境のための有益な解決策であり、公式文書の例も見られます。 https://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/appengine/standard/ndbとhttps://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/appengine/標準/マルチテナント 私は自分の答えを更新しました。 –

関連する問題