Pyramid-jinja2-bootstrap
pyramid
jinja2
bootstrap
いずれも自信がないから
妙に設定疑って調べてみたけど結局はしょうもないことだった奴です。
知識がある程度あれば安全地帯に旗をマークするように ひとつひとつ潰していけるんだけど、真っ白な平原では手当たり次第に進みがち。
Basic template
1 2 |
|
Bootstrap - Getting started
を見ながらjinja2
のテンプレートを作っていたんですが
動かしてみると紹介されてるページと見た目が随分と違うなと気づいて
cssが適用されてないじゃん、とまでわかったのはよかったんですが
絶対パスで指定する方法を調べてしまったが
pyramid_jinja2 のようにiniファイルにJinja2 Filtersの設定を追加して
1 2 3 4 5 6 |
|
絶対パスで指定してcssも綺麗に表示できて満足していたんですけども
1 2 |
|
そもそも
相対パスで指定すればいいじゃん…
1 2 |
|
というそれだけでした。あ、はい、すいません
以上。
pyramid1.5でmongodbプロジェクトを作る
pyramid+mongodbのプロジェクトを 公式ドキュメントの MongoDB and Pyramid を参考にpyramid_mongodbのscaffoldを利用して作成しようとしたらエラーが出て手間取ったのでメモっておく
ひとまずPython2で
Python仮想環境を構築してpyramid
とpyramid_mongodb
をインストールする
1 2 3 |
|
利用できるスカフォードにpyramid_mongodb
があると思うので
これを利用してプロジェクトを作成する
1 2 3 4 5 6 7 |
|
setup.py
から依存パッケージをインストールして
1 2 3 4 |
|
development.ini
のmongodbの接続情報を編集
1 2 3 4 5 |
|
サーバーを実行すると
1 2 3 |
|
ValueError: No such renderer factory .pt
とまあ、エラーになるわけですね…
エラーメッセージでぐぐってみると What’s New In Pyramid 1.5 が出てきて
Pyramid no longer depends on or configures the Mako and Chameleon templating system renderers by default.
とのことで、自分でテンプレートエンジンの設定を追加してあげればよい模様
1 2 3 4 5 6 7 8 |
|
再度setup.py
を実行(もしくは直接pipでインストール)する
1
|
|
__init__.py
にpyramid_chameleon
行を追加
1 2 |
|
サーバー起動して確認してOK.
1
|
|
以上。
Pyramidを触ってみてる
Pyramidのドキュメント読んでたら用語につまずいてしまったので整理。
トラバーサルってなに?
Traversal is an alternative to URL dispatch which allows Pyramid applications to map URLs to code.
URLマッチングでは解決しにくい問題に対するもう一つのURL dispatcher。
自分の理解ではSAStruts
では暗黙の規約となっている
URLパスをパッケージ名に照らし合わせて特定のActionメソッドを呼び出すようなルールを
独自に定義して利用できますよ、といったところ。
URLマッチング
URLパスを解析しあらかじめ登録されたURLパターンと比較してマッチした場合に関連付けらた関数を呼び出す。 複数のパターンにマッチした場合の解決策は先着順であることが多い。
トラバーサル
ファイルシステム検索の仕組みのように 特定のリソースが特定のURLパスによって検索されるプロセス。
/joeschmoe/photos/photo1
に対して以下の擬似コード、
1
|
|
に表現されるような辞書から返却されるリソースとして解決する。
リソースの辞書
- ソース内に直接ハードコーディングされたサイトURL構造から
- RDB等に永続化されたオブジェクトから
- 特定ディレクトリのフォルダ構造から
といったように構築する。
ビュー検索
/joeschmoe/photos/photo1/edit
に対するリクエストはトラバーサルによって
以下のようにリソースが検索されるが、
- get_root() -> リソース
- get_root()[‘joeschmoe’] -> リソース
- get_root()[‘joeschmoe’][‘photos’] -> リソース
- get_root()[‘joeschmoe’][‘photos’][‘photo1’] -> リソース
- get_root()[‘joeschmoe’][‘photos’][‘photo1’][‘edit’] -> リソースでない
末端となるリソースが解決された時点でリクエストパス全体がまだ消費されていない場合に
直後のパスセグメントedit
がview name
として扱われる。
photo1
リソースをコンテキストとしてedit
ビュー(関数)が検索される。
1 2 3 4 |
|
ユースケース
典型的にはCMSのようにURLパスがエンドユーザによって任意に作成されていく場合に URLパターンでは対応が不可能または複雑になることに対する解決策として導入する。
そうではないURL固定パターンでもサイト構造を辞書にハードコーディングしておけばいいので トラバーサルの仕組みでディスパッチしとけばよし。
用語がわからないだけで概念はあるあるでした。
以上。
はじめてのDocker
Macにboot2docker
をインストールして
nginx
のDockerfileを作ってコンテナを起動してみる。
boot2docker
https://github.com/boot2docker/osx-installer/releases からBoot2Docker-1.2.0.pkgをダウンロードしてインストール。
boot2docker start
でboot2docker用のVMが起動してdockerコマンドが利用できるようになる。
1 2 3 4 5 6 |
|
1
|
|
Dockerfile
作業フォルダ作成
1 2 3 4 5 |
|
Dockerfileの内容
1 2 3 4 5 6 |
|
FROM
でBaseイメージの指定MAINTAINER
は自分の名前でもRUN
でコマンド実行ADD
でファイル追加CMD
/ENTRYPOINT
でdocker run
するコマンドを定義ENTRYPOINT
はdocker run
で上書きされない。
docker build
imageを作成
1
|
|
docker run
コンテナ作成
1
|
|
nginxの確認
boot2dockerのvmのipアドレスを確認
1 2 |
|
indexページにアクセス
1 2 |
|
とりあえずこんな感じで。 後は少しずつ使っていこう。
PPAから旧バージョンのPythonをバイナリインストール
Ubuntuで2系と3系の二つがあればいいっていう場合は 公式リポジトリから2つインストールすればいいですが 公式リポジトリにないバージョンのPythonをインストールしたいのなら Personal Package Archives(PPA)を利用するのが一番手っ取り早いですかね。
Old and New Python Versions https://launchpad.net/~fkrull/+archive/ubuntu/deadsnakes?field.series_filter=trusty
1 2 3 4 5 |
|
2.6.XのX部分はマイナーバージョン内での最新のみの模様。
1 2 3 4 5 |
|
バージョンが複数あるようであれば、package=version
で指定できる。
1
|
|
重要な環境に利用する場合はもちろん自己責任で。
If you want to use them in a security-or-otherwise-critical environment (say, on a production server), you do so at your own risk.
以上。