はじめに
以前に「見よ!これが Python製の WordPress風フルスタックCMSフレームワーク「Mezzanine(メザニン)」だ!」という記事で、Python製の WordPress風フルスタックCMSフレームワーク「Mezzanine」を紹介しましたが、今回は、その Mezzanine プロジェクトの開発環境を、Mac版 PyCharm Professional Edition で設定するための手順を書いてみます。
PyCharm Professional Edition は Homebrew-Cask でインストールしています。
<過去記事>
akiyoko.hatenablog.jp
PyCharm の初期設定は済んでいるという前提で進めます。
<過去記事>
akiyoko.hatenablog.jp
やりたいこと
- 最新版の Mezzanine プロジェクトを Vagrant サーバにインストール
- Vagrant サーバと Mac上の PyCharm とのソースコード同期設定
- リモートデバッグ設定
- Mezzanine テーマを変更
環境
<クライアント>
- Mac OS X 10.10.5
- PyCharm (Professional Edition) 5.0.4
<サーバ>
- Ubuntu 14.04 LTS(on Vagrant)
- IPアドレス:192.168.33.103
- ログインユーザ:vagrant
<Mezzanineプロジェクト>
- Django 1.9.4
- Mezzanine 4.1.0
- Cartridge 0.11.0
1. PyCharm の設定(1)
1.1. Pure Python Project を作成
PyCharm を起動し、 [Create New Project] をクリックします。
[Pure Python] を選択し、
Location | /Users/akiyoko/PycharmProjects/mezzanine_project |
Interpreter | (適当) |
を設定します。Interpreter は、後でリモート側の virtualenv のものに変更するので、ここでは適当なものを選択しておきます。
ここで、[Django] プロジェクトではなく [Pure Python] を選択した理由は、[Pure Python] プロジェクトにしておかないとリモートデバッグ機能が使えない(はずだ)からです。
1.2. Vagrant連携
[Tools] > [Vagrant] > [Init in Project Root] を選択します。
PyCharm 上で、Vagrantfile を開いて編集します。
<変更後>
config.vm.network "private_network", ip: "192.168.33.103"
[Tools] > [Vagrant] > [Up] でインスタンスを起動します。
2. Vagrantサーバの初期設定
Vagrant サーバに ssh で乗り込みます。
$ ssh vagrant@192.168.33.103
2.1. 最低限のインストール
$ sudo apt-get update $ sudo apt-get -y install python-dev git tree
2.2. MySQL をインストール
Ubuntu サーバに MySQL をインストールします。
sudo apt-get -y install mysql-server (root/rootpass) sudo apt-get -y install mysql-client libmysqlclient-dev python-mysqldb $ mysql --version mysql Ver 14.14 Distrib 5.5.47, for debian-linux-gnu (x86_64) using readline 6.3 sudo mysql_install_db ### 文字化け対策(セクションの最後に以下の設定を追加) ### http://blog.snowcait.info/2014/06/04/mariadb-utf8/ $ sudo vi /etc/mysql/my.cnf --- [mysqld] ・ ・ # ssl-ca=/etc/mysql/cacert.pem # ssl-cert=/etc/mysql/server-cert.pem # ssl-key=/etc/mysql/server-key.pem # Character set settings character-set-server = utf8 [mysqldump] ・ ・ --- $ sudo service mysql restart $ sudo mysql_secure_installation Enter current password for root (enter for none): Change the root password? [Y/n] n Remove anonymous users? [Y/n] Y Disallow root login remotely? [Y/n] Y Remove test database and access to it? [Y/n] Y Reload privilege tables now? [Y/n] Y
参考
データベース、データベースユーザを作成します。
なお、データベース名は Djangoプロジェクト名と合わせて myproject とします。
データベース名 | myproject |
データベースユーザ | myprojectuser |
データベースユーザパスワード | myprojectuserpass |
$ mysql -u root -p mysql> create database myproject character set utf8; mysql> create user myprojectuser@localhost identified by "myprojectuserpass"; mysql> grant all privileges on myproject.* to myprojectuser@localhost; mysql> flush privileges; mysql> exit
2.3. pip をインストール
Python 2.7.9 以降であれば pip がバンドルされているが、Ubuntu 14.04LTS では Python 2.7.6 が標準なので、手動でインストールします。
「sudo apt-get -y install python-pip」でインストールすると pip のバージョンが古いので、get-pip.py で最新版を入れることにします。
$ wget https://bootstrap.pypa.io/get-pip.py $ sudo -H python get-pip.py $ pip --version pip 8.1.0 from /usr/local/lib/python2.7/dist-packages (python 2.7)
2.4. virtualenv, virtualenvwrapper をインストール
### virtualenv, virtualenvwrapper をインストール $ sudo -H pip install virtualenv virtualenvwrapper ### virtualenvwrapper の設定 $ cat << EOF >> ~/.bash_profile if [ -f ~/.bashrc ]; then . ~/.bashrc fi EOF $ cat << EOF >> ~/.bashrc source /usr/local/bin/virtualenvwrapper.sh export WORKON_HOME=~/.virtualenvs EOF $ source ~/.bashrc
2.5. Mezzanineプロジェクトを作成
Overview — Mezzanine 4.0.1 documentation
に従って、Mezzanineプロジェクトのインストールをします。
### Djangoプロジェクトの virtualenv 環境を設定して activate $ mkvirtualenv myproject ### /opt/webapps 配下にプロジェクトの外箱を作成 $ sudo mkdir -p /opt/webapps/myproject $ sudo chown -R `whoami`. /opt/webapps ### イメージライブラリのインストール ### http://mezzanine.jupo.org/docs/overview.html#dependencies $ sudo apt-get -y install libjpeg8 libjpeg8-dev $ sudo apt-get -y build-dep python-imaging ### MySQLライブラリのインストール $ pip install MySQL-python ### Mezzanine プロジェクトを作成 $ cd /opt/webapps/myproject/ ### Cartridge のインストール $ pip install -U cartridge $ pip list |grep Django Django (1.9.4) $ pip list |grep Mezzanine Mezzanine (4.1.0) $ pip list |grep Cartridge Cartridge (0.11.0) ### プロジェクトのディレクトリ構造は ### myproject/ as <repository_root> also as <django_project_root> ### └─ config/ as <configuration_root> $ mezzanine-project -a cartridge config . $ tree -a /opt/webapps/myproject/ /opt/webapps/myproject/ ├── config │ ├── dev.db │ ├── __init__.py │ ├── local_settings.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── deploy │ ├── crontab.template │ ├── gunicorn.conf.py.template │ ├── local_settings.py.template │ ├── nginx.conf.template │ └── supervisor.conf.template ├── .DS_Store ├── fabfile.py ├── .gitignore ├── .hgignore ├── __init__.py ├── manage.py └── requirements.txt
2.6. Django のデータベース設定を変更
### デフォルトで用意されている config/dev.db は不要なので削除 $ rm config/dev.db ### MySQL用の設定変更 $ vi config/local_settings.py <変更前> --- DATABASES = { "default": { "ENGINE": "django.db.backends.sqlite3", "NAME": "dev.db", "USER": "", "PASSWORD": "", "HOST": "", "PORT": "", } } --- <変更後> --- DATABASES = { "default": { "ENGINE": "django.db.backends.mysql", "NAME": "myproject", "USER": "myprojectuser", "PASSWORD": "myprojectuserpass", "HOST": "localhost", "PORT": "", } }
2.7. デモ用のレコードを投入
createdb でデモ用のレコードを投入することができます。
### migrate実行 ### --noinput オプションを付けると、デモ用の初期データ(site, superuser, 画像などのコンテンツ, etc)を自動登録 ### --nodata オプションを付けると、デモ用画像やギャラリーなどのコンテンツを static 配下に自動作成しない $ python manage.py createdb --noinput ### とりあえずデータベースをバックアップ ### http://weblabo.oscasierra.net/mysql-mysqldump-01/ ### ちなみに、リストアするときは mysql -u root -p myproject < ~/myproject_init.dump $ mysqldump --single-transaction -u root -p myproject > ~/myproject_init.dump
2.8. runserver で起動
$ python manage.py runserver 0.0.0.0:8000
http://192.168.33.103:8000/admin/
にブラウザからアクセスします。
(admin/default)
疎通がOKなら、runserver を一旦停止します。
3. PyCharm の設定(2)
3.1. デプロイ先サーバ設定
[Tools] > [Deployment] > [Options] の [Exclude items by name] に以下を設定します。
.svn;.cvs;.idea;.DS_Store;.git;.hg;.vagrant;Vagrantfile;*.pyc;*.swp
[Tools] > [Deployment] > [Configuration] で設定画面を開き、「+」ボタンをクリックしてサーバの設定を追加します。
Name | mezzanine_project |
Type | SFTP |
各種設定をします。
[Connection]
[Visible only for this project] にチェックを入れます。
SFTP host | 192.168.33.103 |
Port | 22 |
Root path | /([Autodetect] はクリックしない。「/home/vagrant」だとファイルを同期ダウンロードできなくなる) |
User name | vagrant |
Password | vagant([Save password] にチェックを入れる) |
[Mappings]
[Use this server as default] をクリックします。
Local path | /Users/akiyoko/PycharmProjects/mezzanine_project(デフォルトのまま) |
Deployment path | /opt/webapps/myproject |
3.2. ソースコードの同期
プロジェクトで右クリック > [Deployment] > [Download from mezzanine_project] を選択して、Vagrantサーバから PyCharm にプロジェクトをダウンロードします。
ここで、[Tools] > [Deployment] > [Automatic Upload] にチェックを入れます。
3.3. ローカル側でソースコードを Git管理
まず、不要なファイルを削除します。
Mercurialは使わないので .hgignore を Projectペイン上で削除します。
次に、PyCharm の Terminal を開きます。
まだ git config -l の設定をしていなければ、PyCharm の Terminal で以下を設定します。
$ cd /Users/akiyoko/PycharmProjects/mezzanine_project/ $ git config --global user.name akiyoko $ git config --global user.email akiyoko@users.noreply.github.com $ git config --global color.ui auto
git init する前に、.gitignore に PyCharm 用の設定を追加しておきます。
.gitignore
*.pyc
*.pyo
*.db
.DS_Store
.coverage
local_settings.py
/static
# PyCharm
.idea/
.vagrant/
Vagrantfile
一旦コミットします。
$ git init $ git add . $ git commit -m "Initial commit"
3.4. Project Interpreter の設定
[Preferences] > [Project: mezzanine_project] > [Project Interpreter] から、[Python Interpreter] の右側の歯車アイコンをクリックし、[Add Remote] を選択します。
[Vagrant] を選択し、
Vagrant Instance Folder | /Users/akiyoko/PycharmProjects/mezzanine_project(デフォルトのまま) |
Vagrant Host URL | ssh://vagrant@127.0.0.1:2222(デフォルトのまま) |
Python interpreter path | /home/vagrant/.virtualenvs/myproject/bin/python |
を入力して、OK をクリックします。
作成した Remote Interpreter が選択されていることを確認して、[OK] をクリックします。
ここで、Python モジュールに参照エラーが出ないようにするために、[File] > [Invalidate Caches / Restart] を選択し、[Invalidate and Restart] をクリックして、PyCharm を再起動しておきます。
3.5. Run/Debug設定
Project ペインの manage.py ファイルで右クリック > [Create "manage"] を選択します。
Name | manage |
Script | manage.py |
Script parameters | runserver 0.0.0.0:8000 |
Environment variables | PYTHONUNBUFFERED=1(デフォルトのまま) |
Python interpreter | Project Default (Remote Python 2.7.6 Vagrant VM at ~/PycharmProjects/mezzanine_project (/home/vagrant/.virtualenvs/myproject/bin/python)) |
Working directory | /opt/webapps/myproject |
Path mappings - Local path | /Users/akiyoko/PycharmProjects/mezzanine_project |
Path mappings - Remote path | /opt/webapps/myproject |
ここで、「Add content roots to PYTHONPATH」と「Add source roots to PYTHONPATH」のチェックを外します。
デバッグ実行できるか確認できれば、OKです。
3.6. テンプレート設定
ここで、Mezzanine本体の templates をコピーしておきます。
Vagrant サーバ側で、
$ cp -a ~/.virtualenvs/myproject/lib/python2.7/site-packages/mezzanine/core/templates .
を実行した後、PyCharm 上でファイルを同期(ダウンロード)します。
テンプレート(htmlファイル)が参照エラーで真っ赤にに染まってしまっている場合は、[Preferences] > [Languages & Frameworks] > [Python Template Languages] から、「Template language」を「Django」に設定すれば解消するはずです。
4. テーマ変更
参考
試しに、
https://github.com/thecodinghouse/mezzanine-themes.git
の moderna テーマを入れてみます。
Vagrantサーバ側で、以下を実行します。
cd ~ git clone https://github.com/thecodinghouse/mezzanine-themes.git cd /opt/webapps/myproject/ cp -a ~/mezzanine-themes/moderna moderna
コピーしたテーマを Djangoアプリケーションとして設定するために、config/settings.py の INSTALLED_APPS の最後、および TEMPLATES/DIRS の先頭に追加します。
config/settings.py
TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "DIRS": [ os.path.join(PROJECT_ROOT, "moderna/templates"), os.path.join(PROJECT_ROOT, "templates") ], "APP_DIRS": True, ・ ・ ] INSTALLED_APPS = ( ・ ・ "mezzanine.twitter", # "mezzanine.accounts", # "mezzanine.mobile", "moderna", )
まとめ
Mezzanine は普通の Django プロジェクトなので、インストールやテンプレートの設定自体は Django のものと何ら変わりません。
あとはドキュメントを読むだけですね。
Mezzanine — Mezzanine 4.0.1 documentation