Posted at

Cloud9でDjangoの開発環境を作ろうとしたがデバッグのやり方がよく分からなかった話


TL;DR


  • Cloud9とはAWSで使えるブラウザ上で動作するクラウドベースのIDE

  • OSSでも公開されていてローカル環境でも動かせるので、やってみた

  • Djangoの開発環境を作れたが、デバッグのやり方がちょっとよく分からないかった


動作環境


  • Vagrantで構築(boxはbento/ubuntu-19.04)

  • python2.7.16 (Cloud9用)

  • python3.7.3 (Django用)

  • Django2.1


Cloud9のインストール

Cloud9のインストールは割と簡単でした。とりあえずVagarntで仮想マシンを立てます。Vagrantfileはこんな感じで良いと思います。

# -*- coding: utf-8 -*-

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vbguest.auto_update = true
config.vm.box = "bento/ubuntu-19.04"
config.vm.network :private_network, ip: "192.168.99.219"
end

立てたらとりあえずgccとpython2系を入れます。

sudo apt install --no-install-recommends -y gcc python

ほんで、Cloud9はここにある通り、必要なdependenciesをインストールしてくれるスクリプトを公開しているのでこれを実行すれば、準備は整います。

curl -L https://raw.githubusercontent.com/c9/install/master/install.sh | bash

あとはgit cloneしてインストール用のスクリプトを実行すれば完了です。

git clone --depth 1 https://github.com/c9/core.git

./core/scripts/install-sdk.sh


systemdとforeverを使ってcloud9の自動起動と永続化

インストールすると、server.jsで動くよ!みたいなメッセージが出てきたりもしますが、せっかくなので自動起動と永続化をしたいと思いました。

Node.jsで作られたアプリをデーモン化して永続的に実行するにはforeverを使うのが良さそうだったので、まずはこれを入れます。

sudo npm install -g forever

そしたら/etc/systemd/system/cloud9.serviceに以下のファイルを置きます。


/etc/systemd/system/cloud9.service

[Unit]

Description=cloud9 service
After=network.target

[Service]
Type=forking
Environment="HOME=/home/vagrant"
ExecStart=/usr/local/bin/forever start /home/vagrant/core/server.js -l 0.0.0.0 -p 8080 -a : -w /home/vagrant/workspace
ExecStop=/usr/local/bin/forever stop $MAINPID
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=cloud9
User=vagrant
Group=vagrant

[Install]
WantedBy=multi-user.target


ハマりポイントとしてはEnvironment="HOME=/home/vagrant"の部分ですかね。HOMEの環境変数がセットされていないと起動しませんでした。あと実行ユーザにはvagrantを指定してます。

置いたらあとは自動起動の設定をして起動します。

sudo systemctl enable cloud9

sudo systemctl start cloud9

これでCloud9が動き始めてブラウザ上で見られるようになったはずです。

私はVagrantfileにconfig.vm.network :private_network, ip: "192.168.99.219"と設定していたので、http://192.168.99.219:8080 で見れるようになりました。

c9.png


Djangoをインストールし、Cloud9で動かしてみる

作りたいのはDjangoの開発環境なので入れます。

sudo apt install --no-install-recommends -y python3 python3-pip

sudo pip3 install Django==2.1

これらのコマンドは、せっかくなのでCloud9のターミナルで実行してもいいですね。

では次にdjango-adminコマンドでプロジェクトを作ります。作ったら、



  • python3 manage.py migrateの実行

  • 外からでも見れるようにsettings.pyALLOWED_HOSTS['*']を入れる

これらをやります。

ah.png

その次は右上の歯車マークからPreferencesを開いてPython SupportのPython VersionをPython 3にします。

ps.png

もうそろそろ疲れてきましたが、Djangoの実行までもうちょいです。

run.png

bashとかのタブがある画面にNew Run Configurationを選択、Commandにはapp/manage.py runserver 0.0.0.0:8000と入力してRunnerはPythonを指定して実行します。そうするとDjangoのサーバが動き出します。http://192.168.99.219:8000/ で見れると思います。


デバッグのやり方がよく分からなかった

実行してめでたしめでたし、ではなく私はデバッグのやり方を知りたいと思いました。いろいろなページをググると、どうやら「Runnerの虫さんマークにチェックするとデバッグ実行できる」ということが分かりました。が、無いんです。

RunnderでPython2を選ぶと虫が現れます。

p2.png

しかし、Djangoのバージョン2以降はpython3系でないと動かないのでこれでは実行できません。色々調べたのですが結局分からずじまいでした。Cloud9自体は結構遊び甲斐がありそうなので使っていきたいのですが、デバッグ実行を私はやりたいので引き続き調べていこうと思ってます。