私も最近 @Sonosus と同様の問題に遭遇し、Ubuntu (20.04) の最新バージョンに OpenSSL 3.0.2 がプリインストールされていることが原因だと判明しました。この状況は、OpenSSL がプリインストールされている他のバージョンの Ubuntu/Debian でも発生する可能性があります。もしこの問題に遭遇している場合は、ソースから古いバージョンの OpenSSL (私は OpenSSL-1.1.1n を使用しました) をコンパイルし、その後 bundle install コマンドを再実行することをお勧めします。基本的に、このエラーメッセージは OpenSSL >= 1.0.1, < 3.0.0 に関するもので、1.1 が唯一の代替手段であることが判明しました。
ruby --version で使用している Ruby のバージョンも確認する必要があります。Discourse はまだ Ruby 2 を使用しているため、Ruby 3.x 以降を使用している場合は、古いバージョンを使用する必要があります。Ruby のインストール方法によっては、古いバージョンのインストールでも同様の OpenSSL 問題に遭遇する可能性が高いため、ここでは Ruby のバージョンマネージャーを使用することをお勧めします。現在、Discourse で使用するのに最適なバージョンは Ruby 2.7.6 だと判明しました。
Ubuntu 20.04 のクリーンインストール後、bundle install を正しく実行するために行ったことは次のとおりです。
Discourse の依存関係、asdf、および Discourse のクローンをインストールする
bash <(wget -qO- https://raw.githubusercontent.com/discourse/install-rails/master/linux)
sudo apt install build-essential checkinstall zlib1g-dev
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.10.0
git clone https://github.com/discourse/discourse.git ~/discourse
データベースのセットアップ
Ubuntu のシステムユーザー名と同じ名前の ロールを作成します。
sudo -u postgres createuser -s "$USER"
OpenSSL-1.1.1n をソースからインストールする
wget https://www.openssl.org/source/openssl-1.1.1n.tar.gz
tar -zxf openssl-1.1.1n.tar.gz && cd openssl-1.1.1n
./config --prefix=/opt/openssl-1.1.1n --openssldir=/opt/openssl-1.1.1n shared zlib
make
make test
make install
sudo rm -rf /opt/openssl-1.1.1n/certs
sudo ln -s /etc/ssl/certs /opt/openssl-1.1.1n
その後、.bashrc ファイルに次の行を追加しました。
export RUBY_CONFIGURE_OPTS="--with-openssl-dir=/opt/openssl-1.1.1n/"
ついでに、asdf のために次の行も追加しました。
. $HOME/.asdf/asdf.sh
. $HOME/.asdf/completions/asdf.bash
保存して終了し、次に
source ~/.bashrc
Ruby 2.7.6 をインストールする
asdf plugin add ruby
asdf install ruby 2.7.6
これで bundle install を実行できるかもしれませんが、Discourse のインストールプロセス中にさらにいくつかの問題が発生しました。これらの問題が発生した場合は、参考のためにここに記載しておきます。
mini_racer のインストール中にエラーが発生しました
OpenSSL-1.1.1n と Ruby 2.7.6 をインストールした後、bundle install を実行中に常に発生していました。
An error occurred while installing mini_racer (0.6.1), and Bundler cannot continue.
これは、discourse/Gemfile のローカルバージョンで次の行を編集することで解決できます。
そして、次のように置き換えます。
gem 'mini_racer', github: 'rubyjs/mini_racer', branch: 'refs/pull/186/head'
このステップの後、bundle install を正常に実行できるようになりました。
これは、MacOS で発生している問題に似ており、こちら で詳細を読むことができます。
No such file or directory - convert
Discourse のインストールの後半で、bundle exec rake autospec を実行したときに次の問題にも遭遇しました。
Failures:
1. AboutController.index should display the about page for logged in user when login_required is true
Failure/Error: expect(response.status).to eq(200)
expected: 200
got: 500
(comparted using ==)
#./spec/requests/about_controller_spec.rb:27:in 'block (3 levels) in <main>'
#./spec/rails_helper.rb:277:in 'block (2 levels) in <top (required)>'
#---------------------
#---Caused by:---
# Errno::ENOENT
# No such file or directory - convert
# ./lib/letter_avatar.rb:105:inc ``'
このエラーは、ImageMagick パッケージがインストールされていない ( convert バイナリを提供している) ことを意味します。
おそらく、Discourse のインストールプロセスの冒頭にあるこのスクリプトには、必要なパッケージがすべて含まれているはずですが、このパッケージは除外されていたようです。
最後に、sudo apt install imagemagick で ImageMagick をインストールした後、Discourse サーバーを正常に実行できるようになりました。
この情報が、このプロセスを進めていて困っている方々の助けになれば幸いです。![]()