Docker での開発
Discourse は Docker 上で動作するため、Discourse 開発用コンテナを使用して、ソースディレクトリから直接 Discourse を実行できます。
メリット:システム依存関係のインストールが不要で、開発環境を素早くセットアップするための設定も一切不要です。
デメリット:Ubuntu 上のネイティブ開発環境よりもわずかに遅く、MacOS 上のネイティブインストールよりもはるかに遅くなります。
詳しくは Developing Discourse using a Dev Container をご覧ください。
ステップ 1: Docker のインストール
Ubuntu
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce
19.10
sudo apt-get install docker.io
sudo usermod -a -G docker $USER
sudo reboot
Windows WSL: Ubuntu
上記のコマンドは WSL 内で実行できますが、すべてのファイルを WSL のファイルシステム内に配置している必要があります。例えば、~/discourse 内にあれば問題なく動作しますが、/mnt/c/discourse 内に配置すると失敗します。
MacOS
Discourse 開発用 Docker イメージは x86_64 アーキテクチャでのみ利用可能です。M1 Mac はアーキテクチャエミュレーションを使用してイメージを起動できますが、QEMU における inotify サポートの欠如のため、Discourse が起動しない可能性が高いです。
その代わりに、Install Discourse on macOS for development をご利用ください
オプション 1: Docker ストアからパッケージ化された .dmg をダウンロードする
オプション 2: brew install docker
ステップ 2: コンテナの起動
Discourse リポジトリをローカルデバイスにクローンします。
git clone https://github.com/discourse/discourse.git
cd discourse
(ソースルートから)
d/boot_dev --init
# 以下の処理が完了するまでお待ちください:
# - 依存関係のインストール
# - データベースのマイグレーション
# - 管理者ユーザーの作成(対話が必要になります)
# 1 つ目のターミナルで:
d/rails s
# 別のターミナルで
d/dev --only ember
…その後、http://localhost:3000 でブラウザを開くと、さあ、Discourse が表示されます。
プラグインのシンボリックリンク
Docker 開発フローでは plugins/ ディレクトリ配下のシンボリックリンクがサポートされていますが、以下の点にご注意ください:
新しいプラグインのシンボリックリンクを作成するたびに、Docker コンテナを以下のように再起動する必要があります:
d/shutdown_dev; d/boot_dev
注記:
-
メールをテストするには、MailHog を実行してください:
d/mailhog -
不足している gem がある場合は、以下を実行してください:
d/bundle install -
データベースのマイグレーションが必要な場合:
d/rake db:migrate RAILS_ENV=development -
作業が完了したら、以下で Docker コンテナを終了させることができます:
d/shutdown_dev -
データは、ソースルート内の
tmp/postgresディレクトリでコンテナの実行間で永続化されます。何らかの理由でデータベースをリセットしたい場合は、以下を実行してください:sudo rm -fr data -
「Docker への接続中に権限が拒否されました」というエラーが表示された場合は、以下を実行してください:
run `sudo usermod -aG docker ${USER}` sudo service docker restart -
コンテナのポートをネットワーク全体にグローバルに公開したい場合(デフォルトではオフ)は、以下を使用してください:
d/boot_dev -p -
Dockerfile は GitHub の discourse/discourse_docker、具体的には image/discourse_dev から提供されています。
テストの実行
d/rake autospec
特定のプラグインのテストを実行するには、以下のような方法も可能です:
d/rake plugin:spec["discourse-follow"]
さらに詳細に指定したい場合は、以下のようにしてください:
my-machine:~/discourse$ d/shell
discourse@discourse:/src$ RAILS_ENV=test /src/bin/rspec plugins/discourse-follow/spec/lib/updater_spec.rb:37
このドキュメントはバージョン管理されています。変更を提案する場合は GitHub 上で行ってください。