読者です 読者をやめる 読者になる 読者になる

てきとう

ワーワーゆうとります

Mac内の仮想環境作成→herokuアプリ作成してdjangoプロジェクトを動かすまでの準備だよー

前提

  • MacPorts導入済みのMac OSX Lion
  • python、postgres導入済み
  • 仮想環境を作成する
  • herokuアプリとして動かす


heroku toolbeltのインストール


Heroku toolbeltを公式からDLしておく。 https://toolbelt.herokuapp.com/osx
したっけコンソールからherokuが使えるようになる


仮想環境を作成する


仮想環境を作成するためのアレを導入

    • py27-pip
    • py27-virtualenv

この2つ。入ったら仮想環境つくります。

$ mkvirtualenv --distribute -p [使いたいpythonのパス] [アプリ名。ここではhogeとする]

作成したら自動的にworkonされましたが、一応

#仮想環境を動かす時
$ workon hoge
#仮想環境を終了する時
(hoge)$ deactivate
#仮想環境を削除する時
$ rmvirtualenv hoge

私はローカルにpython2.6.8と2.7.3が入っていて、普段「python」でパス通っているのが2.6.8です。
しかし今回は2.7.3(普段は「python2.7」としてパス通している)で作業したかったのでパス指定しました。
pythonパスを指定した場合は、仮想環境をworkonしている時とそうじゃない時のpythonを動かしてバージョン見てみると仮想環境のありがたさがわかります。

ちなみに作成済みのvirtualenv環境で使いたいpythonのパスを間違えた場合、.virtualenv/hoge/.Pythonに貼られているシンボリックリンクを変更する事で解決するかと思いきやそんな事なかったです。
一回rmvirtualenvして作成し直します。rmvirtualenvした時に、.virtualenvs以下のvirtualenv名(この場合hoge)ディレクトリが権限の関係で消せなかったりする事があるので(sudo rmvirtualenvができなかった)rmvirtualenv後に.virtualenvs/hogeのディレクトリごと消しておくといいです
それをしないで同じ名前でvirtualenvを作り直すと過去の.virtualenvs/hoge内にある残留ファイルを引き継いじゃってエラーになります。
気付かずにvirtuaenv作り直して、python自体は動くけどmanage.pyでrunserverしたらfunctools.pyあたり無限ループが起きて、
RuntimeError: maximum recursion depth exceededみたいな悲しい事になって結構ハマりました。
一回pipでdjangoをアンインストールして入れ直すといいよ、みたいな記事もあったのですが、それでも直らなくて上記の手順踏んだらちゃんと動きました。よかったよかった。


Djangoインストール


Djangoインストールして、プロジェクト作成して、ローカルで動かしてみる

(hoge)$ pip install Django psycopg2
(hoge)$ django-admin.py startproject moge .
(hoge)$ python manage.py runserver

するとこんな感じで動いてくれると思います。

Validating models...

0 errors found
Django version 1.4, using settings 'moge.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

そしたらheroku側に必要なモジュール情報を伝えるファイルrequirements.txtを作成しておきます

(hoge)$ pip freeze > requirements.txt
<<
中身確認
>||
(hoge)$ cat requirements.txt 
Django==1.4
distribute==0.6.24
dj-database-url==0.2.1
psycopg2==2.4.5
wsgiref==0.1.2


gitプロジェクト作成してherokuリポジトリ追加

まずはgitでinit

(hoge)$ git init.
(hoge)$ git add .
(hoge)$ git commit -m "app add"

herokuにアプリを追加

(hoge)$ heroku create --stac cedar

Creating xxx-xxxx-xxxx... done, stack is cedar
http://xxx-xxxx-xxxx.herokuapp.com/ | git@heroku.com:xxx-xxxx-xxxx.git
Git remote heroku added

こんな感じになる。多分ここでgitに追加するremoteの名前も指定できるんだけど今回やりませんでした。
テストと本番で2つherokuのremote追加したい場合とか指定するといいんじゃないかな。


gitをpushする

(hoge)$ git push heroku master

無事にpushが完了したら

(hoge)$ heroku open

すると先ほどherokuコンソールから追加されたhttp://xxx-xxxx-xxxx.herokuapp.com/で無事djangoが動いている姿が確認できると思います。