AWS / PHP / Python ちょいメモ

amazon web service , PHP, Python を使ったときのメモ。日本語でググってもわからなかった事を中心に。

Django アップグレード手順まとめ 1.6.x to 1.8.x

この記事は、Python その2 Advent Calendar 2015 の10日目の記事です。

昨日は @CS_Toku さんの Python2からPython3.0での変更点 - Qiita 。明日は @FGtatsuro さん !

どんな話題?

Webアプリを長期運用する時に避けれないのが、フレームワークのアップグレード。約1年前に作った Djangoアプリも例にもれず、1.6.xのメンテナンスが終了ということで、長期サポート(LTS)である 1.8.x へのアップグレードに取り組みました。

大まかな流れとしては、こんな感じです。

  1. 複数バージョンの環境を準備
  2. 1.6.x で Deprecateに対応
  3. 1.7系にバージョンをあげる
  4. migrate する / Deprecateに対応
  5. 1.8系にバージョンをあげる
  6. migrate する / Deprecateに対応
  7. その他の対応

環境

  • Django 1.6.8 で当初開発
  • 開発したmyapp , auth, adminぐらいで構成された比較的小さなプロジェクト
  • DBMSは開発環境のSQLiteと、本番環境のMySQLの2つ


1.7で DB migrate 機能が入ったためか、結構難儀。教訓としては 『メジャーバージョンは1つずつあげていこう』 でしょうか(あたりまえ??)。

(なお migration ツール South 未使用アプリの為、利用してるケースのフローは抑えてません。あと、本来なれば test 走らせるのでしょうか、カバレッジが全然低いので動作は手動で確認。。)

事前準備

公式では、pip使ってるのであれば -U オプションで上書きとありますが、なかなか勇気いりますよね。

僕の場合は、次のような準備を行って、1つずつバージョンを上げるようにしました(DBバックアップを取得したりしながら)。

  • virtualenv/virtualenvwrapper などを用意して、1.6最新 , 1.7最新 , 1.8.x(目的のバージョン)を用意
  • 各種環境で django-admin startproject しておいて、settings.py の違いをdiffっておくと、概要の把握によかった
続きを読む

django-sphinxdoc 試したけど使わなかった

こちらのエントリーみて、納品直前に使いかけた django-sphinxdocdjango-sphinxdoc の動作としては、Sphinx ドキュメントを JSON 形式でDBに入れて、Heystackで全文検索できるようにしてくれるというもの(と思われます)。

しかし、半日ほど試行錯誤した結果、取りやめたので経過をメモしておきます。

欲しかったもの:

  • Sphinx のドキュメントを、Djangoサイトのユーザー認証の仕組みの元で公開

やめた理由:

  • Sphinx のドキュメント、各ページをDBに保存する仕組み (想定より重厚に感じた)
  • Heystack に初めて触れた (知識は増えたが、心のハードルあがったw)
  • templates/base.html が用意されてることが前提 (base.html は作りこみしてなく、Sphinxのテーマのまんまが綺麗と思ってしまった)


導入は、そんなに難しくなく、この手順などで行けました。しかし、ver1.4.0の場合そのままで動かずコードを2箇所ほど修正(UTF-8にない ' 文字?)した事もあり、今回はやめました。

staticなドキュメントをauth配下においてくれるぐらいの、ライトな仕組みが何かないかなぁ?

Python & Django 読んでおきたいエントリー

ここ一年ほど、Python&Djangoをやってきて気になったエントリー集。けっこう好きになった気がする > Python。壮大なフレームワークなんだねと実感してきた > Django

読破したというより、読んでみたいがメインではあります。あと、Pythonメインの選定になってる。

Python

PHP, Perl , JSプログラマーが、Pythonを初めて一ヶ月ではまったポイントなどを整理してくれている、2010年のエントリー。is in 演算子とか、switchがないとか。「 x = 'foo' if <条件式> else 'bar' 」は、三項演算子だったかぁと気づいたり(いまさら。。。)

「 x, y = y, x 」で値の入れ替えを行ったり、スライスの「 items[start:end:step] 」 step を指定して、飛び飛びの値を指定できる。「from xxx import (x, y, z)」 が流行りとあり、トレンドってあるんだなぁと知りました。

続きを読む

AWS SDK for PHP 2 / 3 ドキュメント作成環境

AWS SDK for PHP 2 / 3のドキュメントって、どんなもので作られてるのかなぁと見てみた。

API

UsersGuide

メモ

ちょうど本日 Sphinx 使ってたので、下書きからだしてアップしました。
が、 2年前のエントリー の下調べだったもよう。。。

次回は、もちっと有益そうなものをアップできるようにしようっと。

mysqlclient / MySQL-python コンパイルエラー対処

Redhat w/SCL + pip で、Django/pythonMySQLドライバ mysqlclient / MySQL-python がインストール出来なかった対処メモ。

SCLの問題というか、Redhatrpmパッケージの考え方の問題なのかな?

# MySQL の mysqlclient と python と名前が被って若干混乱

状況と解決

pip でインストールをすると gcc が走ってコンパイルを行うのですが、どちらのドライバも同じ所で失敗してしまってました。

    gcc -pthread -shared build/temp.linux-x86_64-2.7/_mysql.o -L/opt/rh/mysql55/root/usr/lib64/mysql -L/opt/rh/python27/root/usr
/lib64 -lmysqlclient -lpthread -lz -lm -lrt -lssl -lcrypto -ldl -lpython2.7 -o build/lib.linux-x86_64-2.7/_mysql.so
    /usr/bin/ld: cannot find -lmysqlclient

mysqlclient でググルと、MySQL-develと一緒に提供があるとの情報と、libmysqlclient.so によるとある。

続きを読む