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/ember-cli
…その後、ブラウザでhttp://localhost:4200を開くと、Discourseが表示されるはずです。
プラグインのシンボリックリンク
Docker開発フローは、plugins/ディレクトリ内のシンボリックリンクをサポートしていますが、次の注意事項があります。
新しいプラグインのシンボリックリンクが作成されるたびに、Dockerコンテナを次のように再起動する必要があります。
d/shutdown_dev; d/boot_dev
メモ:
-
Eメールをテストするには、MailHogを実行します:
d/mailhog -
Gemが見つからない場合は、次を実行します。
d/bundle install -
DBマイグレーションが必要な場合:
d/rake db:migrate RAILS_ENV=development -
終了したら、コンテナを停止できます。
d/shutdown_dev -
データはコンテナの呼び出し間でソースルートの
tmp/postgresディレクトリに永続化されます。何らかの理由でデータベースをリセットしたい場合は、次を実行します。sudo rm -fr data -
「permission denied while trying to connect to 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で行ってください。