Лучший способ установки для разработки на macOS?

Каковы текущие представления и подходы к установке Discourse на macOS для целей разработки? Я пытался установить по официальным инструкциям из статьи на GitHub — Руководство для начинающих по установке Discourse на macOS для разработки, но это не сработало.

При попытке установки gem-пакета cppjieba_rb-0.3.3 было сообщено об 3 ошибках.

Кто-нибудь ещё сталкивался с этим недавно?

Что выведет команда gem install cppjieba_rb?

~/Developer/localhost/discourse на ветке  master sudo gem install cppjieba_rb -v '0.3.3' --source 'https://rubygems.org/'             в 17:13:33
Пароль:
Сборка нативных расширений. Это может занять некоторое время...
ОШИБКА: Ошибка установки cppjieba_rb:
	ОШИБКА: Не удалось собрать нативное расширение gem.

    текущий каталог: /Library/Ruby/Gems/2.6.0/gems/cppjieba_rb-0.3.3/ext/cppjieba_rb
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/bin/ruby -I /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0 -r ./siteconf20191021-73798-k500fk.rb extconf.rb
создание Makefile

    текущий каталог: /Library/Ruby/Gems/2.6.0/gems/cppjieba_rb-0.3.3/ext/cppjieba_rb
make "DESTDIR=" clean

    текущий каталог: /Library/Ruby/Gems/2.6.0/gems/cppjieba_rb-0.3.3/ext/cppjieba_rb
make "DESTDIR="
компиляция cppjieba_rb.c
компиляция internal.cc
В файле, включённом из internal.cc:1:
В файле, включённом из /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0/ruby.h:33:
В файле, включённом из /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0/ruby/ruby.h:24:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0/universal-darwin19/ruby/config.h:413:31: ошибка: недопустимый суффикс в литерале; в C++11 требуется пробел между литералом и идентификатором [-Wreserved-user-defined-literal]
#define RUBY_ARCH "universal-"RUBY_PLATFORM_OS
                              ^

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0/universal-darwin19/ruby/config.h:414:35: ошибка: недопустимый суффикс в литерале; в C++11 требуется пробел между литералом и идентификатором [-Wreserved-user-defined-literal]
#define RUBY_PLATFORM "universal."RUBY_PLATFORM_CPU"-"RUBY_PLATFORM_OS
                                  ^

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0/universal-darwin19/ruby/config.h:414:55: ошибка: недопустимый суффикс в литерале; в C++11 требуется пробел между литералом и идентификатором [-Wreserved-user-defined-literal]
#define RUBY_PLATFORM "universal."RUBY_PLATFORM_CPU"-"RUBY_PLATFORM_OS
                                                      ^

В файле, включённом из internal.cc:1:
В файле, включённом из /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0/ruby.h:33:
В файле, включённом из /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0/ruby/ruby.h:2111:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0/ruby/intern.h:56:19: предупреждение: спецификатор хранения 'register' устарел и несовместим с C++17 [-Wdeprecated-register]
void rb_mem_clear(register VALUE*, register long);
                  ^~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0/ruby/intern.h:56:36: предупреждение: спецификатор хранения 'register' устарел и несовместим с C++17 [-Wdeprecated-register]
void rb_mem_clear(register VALUE*, register long);
                                   ^~~~~~~~~
В файле, включённом из internal.cc:8:
В файле, включённом из /Library/Ruby/Gems/2.6.0/gems/cppjieba_rb-0.3.3/ext/cppjieba_rb/../cppjieba/include/cppjieba/Jieba.hpp:4:
В файле, включённом из /Library/Ruby/Gems/2.6.0/gems/cppjieba_rb-0.3.3/ext/cppjieba_rb/../cppjieba/include/cppjieba/QuerySegment.hpp:8:
В файле, включённом из /Library/Ruby/Gems/2.6.0/gems/cppjieba_rb-0.3.3/ext/cppjieba_rb/../cppjieba/include/cppjieba/DictTrie.hpp:13:
/Library/Ruby/Gems/2.6.0/gems/cppjieba_rb-0.3.3/ext/cppjieba_rb/../cppjieba/deps/limonp/StringUtil.hpp:87:70: предупреждение: 'ptr_fun<unsigned int, bool>' устарел [-Wdeprecated-declarations]
  s.erase(s.begin(), std::find_if(s.begin(), s.end(), std::not1(std::ptr_fun<unsigned, bool>(IsSpace))));
                                                                     ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/functional:1097:1: примечание: 'ptr_fun<unsigned int, bool>' явно помечен как устаревший здесь
_LIBCPP_DEPRECATED_IN_CXX11 inline _LIBCPP_INLINE_VISIBILITY
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__config:1101:39: примечание: макрос '_LIBCPP_DEPRECATED_IN_CXX11' раскрыт как
#  define _LIBCPP_DEPRECATED_IN_CXX11 _LIBCPP_DEPRECATED
                                      ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__config:1090:48: примечание: макрос '_LIBCPP_DEPRECATED' раскрыт как
#    define _LIBCPP_DEPRECATED __attribute__ ((deprecated))
                                               ^
В файле, включённом из internal.cc:8:
В файле, включённом из /Library/Ruby/Gems/2.6.0/gems/cppjieba_rb-0.3.3/ext/cppjieba_rb/../cppjieba/include/cppjieba/Jieba.hpp:4:
В файле, включённом из /Library/Ruby/Gems/2.6.0/gems/cppjieba_rb-0.3.3/ext/cppjieba_rb/../cppjieba/include/cppjieba/QuerySegment.hpp:8:
В файле, включённом из /Library/Ruby/Gems/2.6.0/gems/cppjieba_rb-0.3.3/ext/cppjieba_rb/../cppjieba/include/cppjieba/DictTrie.hpp:13:
/Library/Ruby/Gems/2.6.0/gems/cppjieba_rb-0.3.3/ext/cppjieba_rb/../cppjieba/deps/limonp/StringUtil.hpp:92:61: предупреждение: 'ptr_fun<unsigned int, bool>' устарел [-Wdeprecated-declarations]
  s.erase(std::find_if(s.rbegin(), s.rend(), std::not1(std::ptr_fun<unsigned, bool>(IsSpace))).base(), s.end());
                                                            ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/functional:1097:1: примечание: 'ptr_fun<unsigned int, bool>' явно помечен как устаревший здесь
_LIBCPP_DEPRECATED_IN_CXX11 inline _LIBCPP_INLINE_VISIBILITY
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__config:1101:39: примечание: макрос '_LIBCPP_DEPRECATED_IN_CXX11' раскрыт как
#  define _LIBCPP_DEPRECATED_IN_CXX11 _LIBCPP_DEPRECATED
                                      ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__config:1090:48: примечание: макрос '_LIBCPP_DEPRECATED' раскрыт как
#    define _LIBCPP_DEPRECATED __attribute__ ((deprecated))
                                               ^
В файле, включённом из internal.cc:8:
В файле, включённом из /Library/Ruby/Gems/2.6.0/gems/cppjieba_rb-0.3.3/ext/cppjieba_rb/../cppjieba/include/cppjieba/Jieba.hpp:4:
В файле, включённом из /Library/Ruby/Gems/2.6.0/gems/cppjieba_rb-0.3.3/ext/cppjieba_rb/../cppjieba/include/cppjieba/QuerySegment.hpp:8:
В файле, включённом из /Library/Ruby/Gems/2.6.0/gems/cppjieba_rb-0.3.3/ext/cppjieba_rb/../cppjieba/include/cppjieba/DictTrie.hpp:13:
/Library/Ruby/Gems/2.6.0/gems/cppjieba_rb-0.3.3/ext/cppjieba_rb/../cppjieba/deps/limonp/StringUtil.hpp:101:70: предупреждение: 'bind2nd<std::__1::equal_to<char>, char>' устарел [-Wdeprecated-declarations]
  s.erase(s.begin(), std::find_if(s.begin(), s.end(), std::not1(std::bind2nd(std::equal_to<char>(), x))));
                                                                     ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/functional:1079:1: примечание: 'bind2nd<std::__1::equal_to<char>, char>' явно помечен как устаревший здесь
_LIBCPP_DEPRECATED_IN_CXX11 inline _LIBCPP_INLINE_VISIBILITY
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__config:1101:39: примечание: макрос '_LIBCPP_DEPRECATED_IN_CXX11' раскрыт как
#  define _LIBCPP_DEPRECATED_IN_CXX11 _LIBCPP_DEPRECATED
                                      ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__config:1090:48: примечание: макрос '_LIBCPP_DEPRECATED' раскрыт как
#    define _LIBCPP_DEPRECATED __attribute__ ((deprecated))
                                               ^
В файле, включённом из internal.cc:8:
В файле, включённом из /Library/Ruby/Gems/2.6.0/gems/cppjieba_rb-0.3.3/ext/cppjieba_rb/../cppjieba/include/cppjieba/Jieba.hpp:4:
В файле, включённом из /Library/Ruby/Gems/2.6.0/gems/cppjieba_rb-0.3.3/ext/cppjieba_rb/../cppjieba/include/cppjieba/QuerySegment.hpp:8:
В файле, включённом из /Library/Ruby/Gems/2.6.0/gems/cppjieba_rb-0.3.3/ext/cppjieba_rb/../cppjieba/include/cppjieba/DictTrie.hpp:13:
/Library/Ruby/Gems/2.6.0/gems/cppjieba_rb-0.3.3/ext/cppjieba_rb/../cppjieba/deps/limonp/StringUtil.hpp:106:61: предупреждение: 'bind2nd<std::__1::equal_to<char>, char>' устарел [-Wdeprecated-declarations]
  s.erase(std::find_if(s.rbegin(), s.rend(), std::not1(std::bind2nd(std::equal_to<char>(), x))).base(), s.end());
                                                            ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/functional:1079:1: примечание: 'bind2nd<std::__1::equal_to<char>, char>' явно помечен как устаревший здесь
_LIBCPP_DEPRECATED_IN_CXX11 inline _LIBCPP_INLINE_VISIBILITY
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__config:1101:39: примечание: макрос '_LIBCPP_DEPRECATED_IN_CXX11' раскрыт как
#  define _LIBCPP_DEPRECATED_IN_CXX11 _LIBCPP_DEPRECATED
                                      ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__config:1090:48: примечание: макрос '_LIBCPP_DEPRECATED' раскрыт как
#    define _LIBCPP_DEPRECATED __attribute__ ((deprecated))
                                               ^
Сгенерировано 6 предупреждений и 3 ошибки.
make: *** [internal.o] Ошибка 1

make завершилась с ошибкой, код выхода 2

Файлы gem останутся установленными в /Library/Ruby/Gems/2.6.0/gems/cppjieba_rb-0.3.3 для проверки.
Результаты записаны в /Library/Ruby/Gems/2.6.0/extensions/universal-darwin-19/2.6.0/cppjieba_rb-0.3.3/gem_make.out

Вы уже решили эту проблему? У меня возникла та же проблема, когда я переключился с bash на zsh и забыл настроить rbenv. Как только я снова начал использовать rbenv, всё вернулось в норму.

Системный Ruby в macOS иногда вызывает проблемы.

Мне не удалось разобраться. Вы сделали что-то ещё помимо установки rbenv в рамках скрипта установки зависимостей Discourse? Я сделал только это, так как других инструкций нет.

Моя среда разработки была настроена очень давно, поэтому я не уверен. Я не думаю, что делал что-то особенное в то время, но, возможно, с тех пор в macOS что-то изменилось.

Думаю, можно проверить, настроен ли rbenv… Если вы запустите nano ~/.bash_profile, вы должны увидеть что-то вроде этого:

# load rbenv
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init - --no-rehash)"

Также можно выполнить rbenv versions, чтобы увидеть, какая версия в данный момент выбрана (она помечена звёздочкой). Если там указано system, её стоит изменить… Версия 2.6.1 у меня работает отлично. (rbenv install 2.6.1, а затем rbenv global 2.6.1)