前回からの続きで、BluemixのPythonランタイムへのデプロイについて説明します。基本的にはDeveloperWorksの記事を参考にしています。
4. BluemixのPythonランタイムへのデプロイ
4.1. cfコマンドをインストール、Bluemixに接続します。手順はこちらです。
cf api https://api.ng.bluemix.net
cf login -u アカウント -o 組織 -s 空間
4.2. pushするパッケージを作成するため、C:\Users\hoge\workspace_env3\kinetiseを同じディレクトリにコピーしてbmaakinetaiseとし、仮想環境(env3)のLib\site-packages\rf_alter_apiフォルダをbmaakinetaiseフォルダにコピーします。rf_alter_apiはgithubで入手できないからです。そして、以下のファイルを作成します。すべてSJISで動作します。
4.2.1. requirements.txtにはPythonランタイムをデプロイする際に組み込まれるモジュールを記述します。このファイルには、Pythonと、動作確認できている仮想環境(env3)でのpip freeze -lを実行結果を、記述します。そして、今までの作業で使用したPythonのバージョンがgithubのpython-buildpack/builds/runtimes/に含まれることを確認します。
Python==2.7.10
Django==1.9
django-filter==0.11.0
djangorestframework==3.3.2
drf-extensions==0.2.8
Markdown==2.6.5
wheel==0.24.0
yattag==1.5.2
(補足) cf pushのデプロイ時のコンソールで、実際に使用されているPythonのバージョンを識別することができます。正常にデプロイできない場合、問題の切り分けが複雑になるのを回避するために、含まれるバージョンを導入し、最初からここまでの作業をやり直してください。この記事の作業では、最初はPython 2.7.11を使用して作業していましたが、buildpackに含まれるのは2.7.10まででしたので、やり直しています(2015年12月時点)。また、requirement.txtなどと、不正確なファイル名(requirementではなくrequirements、つまり末尾のsが足りません)だとcfコマンドは動作しますが、デプロイ時にエラー(Directory '.' is not installable. File 'setup.py' not found.)になりますので注意してください。なお、Python==2.7.10の記述がなくても正常にデプロイされます。単純に、メモとして記述しています。
4.2.2. bluemixはGB時間で課金されます。manifest.ymlでは、デプロイするpythonランタイムに割り当てるメモリ量と、pythonのbuildpackを指定します。
---
applications:
- name: bmaakinetise
memory: 512M
command: bash run.sh
buildpack: https://github.com/cloudfoundry/python-buildpack
(補足) run.shはbashシェルで記述しているので、command: bash run.shとしています。command: sh run.shでも、run.sh内部で#!/bin/bashと宣言しているので動作しますが、bashならbashで統一したほうがよいと考えています。
4.2.3. run.shではPORTの指定や、デプロイ時に実行するシェルを記述します。今回のケースでは、デプロイがエラー終了するのを回避するため、kinetiseが提供しているrf_alter_apiを明示的にPYTHONPATHに含めています。追加しているパスは、デプロイ時のエラー(module not found)のメッセージを参考にしています。pipでインストールできないカスタムモジュールの使用方法として参考になると思います。
#!/bin/bash
PYTHONPATH="/home/vcap/app/kinetise/:$PYTHONPATH"
export PYTHONPATH
if [ -z "$VCAP_APP_PORT" ];
then SERVER_PORT=5000;
else SERVER_PORT="$VCAP_APP_PORT";
fi
echo port is $SERVER_PORT
python manage.py runserver --noreload 0.0.0.0:$SERVER_PORT
(補足) PYTHONPATHの記述がなくても正常にPythonランタイムが動作する場合がありますが、問題の切り分けのために明示的に記述しています。
4.2.4 bmaakinetiseフォルダは以下のようになっています。
C:\Users\hoge\workspace_env3\bmaakinetise のディレクトリ
2015/12/18 19:06 <DIR> .
2015/12/18 19:06 <DIR> ..
2015/12/18 15:23 436 .project
2015/12/18 15:23 604 .pydevproject
2015/12/18 18:25 <DIR> .settings
2015/12/18 18:25 <DIR> comments
2015/12/18 17:31 38,912 db.sqlite3
2015/12/18 18:25 <DIR> kinetise
2015/12/18 15:23 251 manage.py
2015/11/23 22:19 137 manifest.yml
2015/12/18 18:56 151 requirement.txt
2015/11/23 19:41 186 run.sh
4.3. cfコマンドでデプロイします。
(env3) C:\Users\hoge\workspace_env3\bmaakinetise>cf push --no-start
Using manifest file C:\Users\hoge\workspace_env3\bmaakinetise\manifest.yml
Creating app bmaakinetise in org hoge@hoge.com / space dev as hoge@hoge.com...
OK
Creating route bmaakinetise.mybluemix.net...
OK
Binding bmaakinetise.mybluemix.net to bmaakinetise...
OK
Uploading bmaakinetise...
Uploading app files from: C:\Users\hoge\workspace_env3\bmaakinetise
Uploading 60.7K, 32 files
Done uploading
OK
4.4. bluemixのダッシュボードでデプロイしたpythonランタイムを起動し、前回同様に、bluemixが割り当てたURLを使用してPOSTMANで同様の動作確認をします。
これで、BluemixのPythonランタイムへのデプロイについての説明は終了です。次はKinetiseでMobile Applicationの開発とビルドを説明します。