nginxとpythonとpyramid MySQLの設定
サムライファクトリーの平成コンビがお送りするWebサービスダイナシ
画像にコメントをつけて、ぜひ楽しんでください。
前回まででsqliteを使ったサンプルアプリケーションの起動までを紹介しました。
sqliteは構築や扱いが簡単で便利なデータベースですが、
今回はMySQLを利用するように変更したいと思います。

前回までのエントリー
Pyramidのインストールまで
サーバーの起動まで

MySQLサーバーのインストールは他のサイトか過去のエントリーを参考にしてみてください。
NginxとuwsgiとDjango
※今回はmysql-pythonをpipで直接インストールしません。

MySQLのサーバーが起動されている状態でデータベースとユーザーが登録されている状態にします。
データベース名:sample
ユーザー名:user
パスワード:user_pass

用意が出来たら下記コマンドを実行するとMySQLに接続出来ると思います。

mysql -u user -puser_pass sample


development.iniを開き、sqliteの接続先の設定をmysqlに変更します。

#sqliteの接続設定
#sqlalchemy.url = sqlite:///%(here)s/sample.db

#mysqlの接続設定
sqlalchemy.url = mysql://user:user_pass@localhost:3306/sample?charset=utf8&use_unicode=1
sqlalchemy.pool_recycle = 3600


直接pipでmysqlドライバーをインストールせず前回同様にsetup.pyに記述します。

requires = [
'pyramid',
'SQLAlchemy',
'transaction',
'pyramid_tm',
'pyramid_debugtoolbar',
'zope.sqlalchemy',
'waitress',
'mysql-python', <-- pysqliteから変更
]


sampleプロジェクトのmodelクラスがTEXT型のunique設定になっているのでMySQLでサポートされていません。
sample/sample/models.pyを編集してStringに変更するか、unique属性を削除してください。

from sqlalchemy import (
Column,
Integer,
String, <-- TextからStringに変更
)

name = Column(String(200), unique=True) <-- TextからString(200)に変更


せっかくsetup.pyに必要なライブラリーを記述したので一度pythonbrewの仮想環境を再作成したいと思います。

deactivate
rmvirtualenv pyramid
mkvirtualenv pyramid
python setup.py develop
populate_sample development.ini

※2012/3/24追記
Pyramid1.3正式版からコマンドがpopulate_sampleからinitialize_sample_dbに変更されました。

仮想環境の構築からデータベースの設定までコマンドだけで簡単に用意できるようになりました。
populate.pyに初期データの登録なども追加しておく事で、途中から開発者が追加された場合でもスムーズに作業が開始できます。

フルスタックなフレームワークではないですが、開発に必要な基本的機能が備わっているので小規模なサービスを作るには非常に便利だと思います。

2012/03/11 17:09 | Comments(0) | プログラム
nginxとpythonとpyramid 起動まで
サムライファクトリーの平成コンビがお送りするWebサービスダイナシ
画像にコメントをつけて、ぜひ楽しんでください。
前回のエントリーでPyramidのインストール方法を紹介しました。
今回はプロジェクトの新規作成からサーバー起動までを紹介します。

前回作成したpythonbrewの仮想環境を起動します。

workon pyramid


コンソールに「(pyramid)[xxxx@xxx]$ 」のように表示されていれば成功です。
現在仮想環境「pyramid」にインストールされたパッケージ一覧を表示する場合はfreezeコマンドを利用します。

pip freeze

pyramidに必要なパッケージ群が一覧に表示されます。

仮想環境を起動中はPATHの先頭に「/home/yoshi/.virtualenvs/pyramid/bin」が追加されます。
pythonコマンドやpipコマンドの他に、pipでインストールしたPyramidのツールコマンドも含まれています。

pcreateコマンドで新規プロジェクトを作成します。

pcreate -s alchemy sample

カレントディレクトリにプロジェクト「sample」が作成されます。
Railsのscaffoldみたいに枠組みが自動生成されます。
ここでは「-s alchemy」で枠組みのテンプレートを指定しています。
sqlalchemyの設定などが組み込まれた状態まで自動生成してくれるのでとても便利です。
また、他のテンプレートを確認したい場合は-lコマンドで確認できます。

作成したsampleプロジェクトの「development.ini」中身を確認すると
「sqlalchemy.url = sqlite:///%(here)s/sample.db」の記述があります。
デフォルトではsqliteを利用する設定で用意されています。
ただし、先ほどのfreezeコマンドで確認した一覧にsqliteを扱うためのライブラリがインストールされていません。

別途sqliteパッケージとpython用ライブラリをインストールします。

sudo yum install sqlite.x86_64
sudo yum install sqlite-devel.x86_64


次にpipでpython用ライブラリをインストールするのですが、
せっかくなのでsetup.pyに記述しておきます。
プロジェクトのトップディレクトリにあるsetup.pyを開き、変数「requires」のリストに「pysqlite」を追加します。

requires = [
'pyramid',
'SQLAlchemy',
'transaction',
'pyramid_tm',
'pyramid_debugtoolbar',
'zope.sqlalchemy',
'waitress',
'pysqlite', <--- 追加
]


sampleプロジェクトのトップディレクトリに移動してdevelopコマンドを実行します。
※基本的にPyramidコマンドはプロジェクトのトップディレクトリで実行します。

python setup.py develop

自動的にsqlite用パッケージがインストールされ、依存パッケージがある場合は一緒にインストールされます。
「pip install」でも同じ事が可能ですが、setup.pyに記述しておく事で後から別の環境に構築するのが簡単になります。

次にデータベースの用意をします。sampleプロジェクトではすでにサンプルが用意されているのでコマンドを実行して作成します。

populate_sample development.ini

コマンドを実行するとトップディレクトリに「sample.db」が作成されます。
※2012/3/24追記
Pyramid1.3正式版からコマンドがinitialize_sample_dbに変更されました。

populate_sampleコマンドは先ほどのPATHに含まれているコマンドです。
コマンドの実態は「${PROJECT_HOME}/sample/scripts/populate.py」になります。
populate_sampleコマンドとpopulate.pyの紐付けはsetup.pyに記述されています。
setup関数のentry_points引数に文字列で下記のように指定されています

entry_points="""\
[paste.app_factory]
main=sample:main
[console_scripts]
populate_sample=sample.scripts.populate:main
""",

「コマンド名=ソースパッケージ:実行関数」の書式で指定されているので、
cronでバッチ処理を実行したい場合はここに新しいスクリプトを追加します。

以上でsampleプロジェクトの構築は完了となります。

PyramidにはデフォルトでWSGIサーバー「waitress」が付属されているのでpserveコマンドで実行します。

pserve development.ini --reload

デフォルトでポート6543で起動されることを確認したらブラウザからアクセスします。
http://domain:6543/

サンプルプロジェクトのページが表示されコンソールにSQL実行ログが表示されます。
プロジェクトの作成から設定、ログ出力など簡単なコマンドを実行するだけで用意されるのがとても便利かと思います。

2012/03/04 17:58 | Comments(0) | プログラム

<<前のページ | HOME | 次のページ>>