生地の流れ、n
焼成中の流動状態。
安っぽいキャッシュフローのダジャレ。
キャッシュフローウェブアプリ。
DoughFlow はクライアント/サーバー Web アプリケーションであり、それぞれ EmberJS/Google Cloud Firebase 上に構築されています。
バックエンド ロジックは Firebase Cloud Functions 経由で実装され、Firebase 自体をユーザー データのバッキング ストアとして使用します。これにより、軽量のサーバーレス展開でビジネス ロジックがクライアントから離れてカプセル化されます。
フロントエンドは App Engine から静的ページとして提供されます ( TODO これは行わないでください... GCS か何かから提供します)。
Google App Engine 上でホストされ、そのマイクロサービス フレームワークを使用します。
サービスとして実装されたフロントエンド: default
EmberJS ファイルは静的ファイル (html およびアセット) として提供されます。
バックエンド機能は Cloud Functions として実装されます (注意: Firebase フレーバーであり、「純粋な」クラウドではありません。統合はアルファ版すぎるようです)
バックエンド ストレージはそのまま Firebase です
便宜上、 DOUGH_FLOW=/home/me/my_dough_flow_checkout
とします (たとえば、シェル rc に追加します。zsh でexport
必要があります)。
GAE アプリを使用した GAE プロジェクト (おそらく課金の設定が必要です)
GoogleクラウドSDK
https://cloud.google.com/sdk/downloads
NodeJS (私は nvm で 7.10 を使用しました)
brew install nvm; nvm install v7.10
EmberJS (2017-05-26 時点で最新のものを使用しました)
npm install -g [email protected]
ファイアベース
npm install -g firebase-tools; npm install -g firebase-server
Google Cloud プロジェクトに関連付けられた Firebase プロジェクト
FirebaseサーバーとSDK
src/frontend
に移動します。
ember build
(注: そうですか? npm のものは自動的にインストールされますか?)
gae/
に行きます。 GAE デプロイメント用のビルド アーティファクトをコピーします。
ln -s ../src/frontend/dist
詳細については、フロントエンドの Readme を参照してください。
実際の AppEngine をビルド/デプロイする場合:
ember build --environment=production
TODO
/etc/hosts
(または同様のもの) を編集してマップします。
127.0.0.1 localhost.firebaseio.test
Firebase は DB URL が特定の形式であることを好むため、単にローカル IP またはローカル ホストをdatabaseURL
として使用することはできません。
プロジェクトのルートから、
bin/start-doughflow-firebase# または詳細デバッグの場合: DEBUG=* bin/start-doughflow-firebase
(このスクリプトが機能するには、環境にDOUGH_FLOW
が必要であることに注意してください。)
(注意: 便宜上、シェルのパスに
$DOUGH_FLOW/bin
を追加できます)
これにより、 localhost.firebaseio.test
ポート5555
で利用可能なtest/firebase.json
からのデータがロードされたローカル Firebase のようなサーバーが起動します。 Ember アプリは、 environment=development
の場合にこのホスト名を使用するように設定されています。
ローカル Firebase サーバーを起動します (上記を参照)。次に、 src/frontend
から、
残り火サーバー
これにより、ポート 4200 でリッスンするライブリロード Web サーバーが開始されます。アプリを表示するには、http://localhost:4200 に移動します。
これが実際に必要かどうかはわかりません。クライアントが制御すべきではない繊細なサーバー ロジックにはクラウド機能が必要になります。今のところ、そのようなものはありません。しかし、それを理解するのは苦痛でした。そこで、後世のためにいくつかのメモを残しておきます。
src/firebase/functions
でいくつかの関数を設定し、 helloWorld などのサンプルを使用します。これはsrc/firebase/functions/index.js
である必要があります。
src/firebase/functions/config.json
ファイルで認証を設定します。ローカルの場合、実際の認証情報はおそらく必要ありません。
ローカル関数エミュレータを実行します。
src/firebase/functions
ディレクトリから:
import CLOUD_RUNTIME_CONFIG=`pwd`/config.json && firebaseserve --only 関数
TODO