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 -
終了したら、次のように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で行ってください。