Я тоже недавно столкнулся с проблемой, похожей на ту, что у @Sonosus, и выяснил, что она вызвана тем, что в последней версии Ubuntu (20.04) по умолчанию предустановлен OpenSSL 3.0.2. Эта ситуация может также наблюдаться в других версиях Ubuntu/Debian, где OpenSSL установлен по умолчанию. Если вы столкнулись с этим, вам, скорее всего, потребуется скомпилировать более раннюю версию OpenSSL из исходного кода (я использовал OpenSSL-1.1.1n), а затем снова запустить команду bundle install. По сути, эта ошибка связана с требованием OpenSSL >= 1.0.1, < 3.0.0, и оказывается, что 1.1 — единственная альтернатива.
Также стоит проверить версию Ruby с помощью команды ruby --version. 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
При запуске bundle install после установки OpenSSL-1.1.1n и Ruby 2.7.6 я постоянно сталкивался с ошибкой:
An error occurred while installing mini_racer (0.6.1), and Bundler cannot continue.
Это можно исправить, отредактировав следующую строку в локальной версии файла Gemfile в репозитории discourse:
И заменив её на:
gem 'mini_racer', github: 'rubyjs/mini_racer', branch: 'refs/pull/186/head'
После этого шага мне удалось успешно запустить bundle install.
Это похоже на проблему, возникающую в MacOS, о которой можно прочитать подробнее здесь
Нет такого файла или каталога - 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
(compared 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:in ``'
Эта ошибка означает, что пакет ImageMagick не установлен (он предоставляет исполняемый файл convert).
Согласно документации, этот скрипт в начале процесса установки Discourse должен устанавливать все необходимые пакеты, но, похоже, этот был исключён.
Наконец, после установки ImageMagick с помощью команды sudo apt install imagemagick мне удалось успешно запустить свой сервер Discourse!
Надеюсь, эта информация будет полезна всем, кто проходит через этот процесс и сталкивается с трудностями. ![]()