へっぽこびんぼう野郎のnewbie日記

けろけーろ(´・ω・`)! #vZkt8fc6J

いまさらさくらのレンタルサーバでPython2.7.6+Django1.7.4の環境構築してみた。

はじめに

レンタルサーバってどういうのがあるかわからないけど、
とりあえずノリで昔から聞いたことあるとこを借りてみたわけです。

なんで2.7.6なの?について

デフォルトをかえていない


あ、これ月額500円なのかと、
よく見ずにポチった。

そしてさっそくログインするとFreeBSD
なんだこのUnixのようなものは……となる。bashが使えなくてもにょったので即chshする。

気を取り直して取り組むと
FreeBSDでは、pkg_addとかいうものをすればUbuntunのaptitudeとかMacのHomebrewとかWindowsのChocolatelyみたいなことができるらしいと知る。
rootでやらないといかんらしい。

sudoと打って適当にやる。
Permission deniedされる。
えっ。マジで。

じゃあまあとりあえず、virtualenv入れて、
仮想環境の中で全てをやってみることにしようと決めた。
例のあれ(仮題)- virtualenvでPython環境をわがままに。
例のあれ(仮題)- さくらのレンタルサーバでDjangoを動かす。

ここがとても役にたった。virtualenvさえ入れてしまえれば、パッケージに関してはオールオッケーな感じ。

ただしこのDjangoの公開のへんでかなり詰んだ。
というのも僕がDjango初心者で、Djangoの概要すらまともに掴んでいなかったことが原因だ。

よく考えたら、ブログにこういう記事を書いている方は、わざわざ貧弱なサーバを借りて作っているんだから、
Djangoに関しては結構詳しい人が多いはずだということがわかった。

例のあれ(仮題)- さくらのレンタルサーバでDjangoアプリを公開する。
さくらインターネット、CGIでDjangoを動かす - 30からのBlog

他にもいっぱいありましたが、大体結構昔の記事が多い感じでした。

こまったところ

.htaccessってなんだよ……

非rootでもアクセスできるファイルです。
httpd.confという、Apacheサーバを起動するときに読み込むファイルがあるのですが、基本的にこれはroot権限のある場所に置かれてるらしいので、
これを編集できないときに、似たような設定を書いて読み込ませるためのファイルです。~/www/の下に置きます。
root権限がある場合は基本的にいじらないようです。

wsgiってなんだし

What WSGI¹ is not: a server, a python module, a framework, an API or any kind of software. What it is: an interface specification by which server and application communicate.
WSGI Tutorial | Web Python

かなりの場所でwsgiアプリケーションという言葉を見かけましたが、wsgiはアプリケーションではなく単なるインターフェースのようです。
WSGI_APPLICATIONなる変数がありますが、これはwsgiを使ってgetしたapplicationじゃないのと思っています(てきとう)

wsgiってなに?
What is WSGI? — WSGI.org
 
重要だけど、あんまり重要じゃないやつみたいな感じですかね。
よくわからん。

mod_rewriteってなに

送られてきたURLが、書かれた正規表現に一致していれば、それを変換してくれるapacheの機能です。
modと書いてあるくらいなのだからモジュールなのだろう。
そのmod_writeの機能本体がどこにあるのかは、正直よくわからないけど(apache内部に組み込まれているのかな?)、とりあえず.htaccessに書けば動く。
この場合は、ドメインが入力されたらとりあえずdjango.cgiに転送するよってやつ。
mod_rewrite - Apache HTTP Server Version 2.4

django.cgiってなに

普通は、python manage.py runserverするところを、(今回はroot権限がなくてできないので)
既にいつもサーバが立ってる状態の~/www/下にdjango.cgiを置いて、
そうしていつものプロジェクトのとこ(例えば~/src/下などにあるプロジェクト・プロジェクトはdjango-admin.py startproject homogeなどで作成)
を呼び出して、『おっサーバ立ったやん』とみなすやり方らしいです。たぶん。

書いてある通りにやったけどエラーでた。なんでだ……

なんでだ。

loggingについて

ログを残してくれる機能です。
公式よりいいです。
Getting Started with Django Logging in 5 Minutes
StackOverflowの質問に答えています。
python - django.request logger not propagated to root? - Stack Overflow
公式です。
Logging | Django documentation | Django

Translation なんちゃらと言われた

"Translation infrastructure" error for Django 1.7 : Forums : PythonAnywhere
に書いてありました。

django.cgi

run_with_cgi(django.core.handlers.wsgi.WSGIHandler())

from django.core.wsgi import get_wsgi_application
run_with_cgi(get_wsgi_application())

こうしたら動いた。
よくわかってないですが、Django1.6と1.7では挙動が違うようですね。
django.cgi自体は昔のヤツなので、こんなところまで影響が及んでいるようです。

とりあえず何も書いてないけど動いた。
あとはDjangoのリファレンス読みながらたんたんとサイトを作っていくだけだ。
たんたんと作るのが一番難しいんだけどさ……