Docker для Mac - mkmf.rb не может найти заголовочные файлы для ruby

Я обновил XCode на своем Mac и с тех пор при запуске Docker с помощью docker-sync-stack start я получаю это сообщение об ошибке:

mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/include/ruby.h

Я попытался установить ruby ​​с этим: brew install rbenv ruby-build, но это ничего не меняет.

Кто-нибудь знает, как я могу это исправить?

Спасибо!

Ответ 1

При обновлении XCode вам необходимо установить средства командной строки и дополнительно принять условия:

sudo xcode-select --install

Тогда:

sudo xcodebuild -license

Ответ 2

Ни одно из других решений не помогло мне, вот что я использовал для решения проблемы в Mac OS 10.14.x:

sudo rm -rf /Library/Developer/CommandLineTools
xcode-select --install
sudo xcodebuild -license accept
open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

Ответ 3

Для Xcode 11 я исправил это, также установив пакет /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg.

Ответ 4

Начиная с Xcode 11, кажется, что заголовочные файлы разработки ruby больше не включены, поэтому вам нужно будет установить их вручную вне инструментов командной строки Xcode.

Например. для меня с помощью rbenv я сделал

rbenv install 2.6.4
rbenv global 2.6.4
eval "$(rbenv init -)"

Затем запустил пакетную установку, и все заработало как положено.

Ответ 5

У меня была такая же проблема при установке fastlane. Ответ tadman правильный, но командные строки у меня не работают с Xcode 10.2.1 (я не уверен с другими версиями). Вам нужно открыть XCode, затем открыть Preferences, выбрать Locations и выбрать Инструменты командной строки. В моем случае поле инструментов командной строки пустое.

Ответ 6

Как сказал @bdorfman в своем комментарии, заголовки Ruby больше не включаются в сборку Xcode 11, но, похоже, они пытаются создать новую сборку для этого как можно скорее (?): https://discuss.circleci.com/t/xcode-11-gm-seed-2-released/32505/12.

Для меня было полезно использовать rbenv, как сказал @bdorfman:

rbenv install 2.6.4
rbenv global 2.6.4
eval "$(rbenv init -)"

Но с дополнительным шагом добавления docker-sync к вашей новой версии ruby. Поскольку после изменения версии ruby (например)

$ ruby -v
ruby 2.6.4p104 (2019-08-28 revision 67798) [x86_64-darwin18]

А затем запустим список драгоценных камней:

$ gem list
bigdecimal (default: 1.4.1)
bundler (default: 1.17.2)
cmath (default: 1.0.0)
csv (default: 3.0.9)
date (default: 2.0.0)
dbm (default: 1.0.0)
did_you_mean (1.3.0)
e2mmap (default: 0.1.0)
etc (default: 1.0.1)
fcntl (default: 1.0.0)
fiddle (default: 1.0.0)
fileutils (default: 1.1.0)
forwardable (default: 1.2.0)
io-console (default: 0.4.7)
ipaddr (default: 1.2.2)
irb (default: 1.0.0)
json (default: 2.1.0)
logger (default: 1.3.0)
matrix (default: 0.1.0)
minitest (5.11.3)
mutex_m (default: 0.1.0)
net-telnet (0.2.0)
openssl (default: 2.1.2)
ostruct (default: 0.1.0)
power_assert (1.1.3)
prime (default: 0.1.0)
psych (default: 3.1.0)
rake (12.3.2)
rdoc (default: 6.1.2)
rexml (default: 3.1.9)
rss (default: 0.2.7)
scanf (default: 1.0.0)
sdbm (default: 1.0.0)
shell (default: 0.7)
stringio (default: 0.0.2)
strscan (default: 1.0.0)
sync (default: 0.5.0)
test-unit (3.2.9)
thwait (default: 0.1.0)
tracer (default: 0.1.0)
webrick (default: 1.4.2)
xmlrpc (0.3.0)
zlib (default: 1.0.0)

(не содержит синхронизацию с докером)

Если вы запустите установку gem для docker-sync, вы будете использовать docker-sync для вашего управляемого рубина rbenv.

$ gem install docker-sync

Ответ 7

Исправление однострочной команды:

В OSX Mojave я выполнил следующую команду:

sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /

и это решило проблему.

Ответ 8

Для XCode 11 в MacOS 10.14 это может произойти даже после установки XCode, установки инструментов командной строки и принятия лицензии с помощью

xcode-select --install
xcodebuild -license accept

Проблема в том, что Xcode поставляет macOS 10.15 SDK, который включает заголовки для ruby2.6, но не для macOS 10.14 ruby2.3. Вы можете убедиться, что это ваша проблема, запустив

ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'

который в macOS 10.14 с Xcode 11 печатает несуществующий путь

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0

В /Library/Developer/CommandLineTools/SDKs все еще может быть macOS 10.14 SDK. Нет необходимости загрязнять системные каталоги, устанавливая старые заголовочные файлы, как указано в других ответах. Вместо этого, указав на нее переменную окружения SDKROOT, будут найдены соответствующие заголовки ruby2.3:

SDKROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/
export SDKROOT
ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'

Теперь это должно правильно напечатать

/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk//System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0

Аналогично, gem install должен работать, пока установлена переменная окружения SDKROOT.

Ответ 9

Если вы хотите глубже понять проблему:

Mac OS X 10.14 прекратила помещать библиотеки включения в свои обычное местоположение, /usr/include, сохраняя их только внутри XCode Каталог.

Чтобы подтвердить, что это проблема, просто запустите ls /usr/include. Если результат получается пустым, это действительно проблема.

Apple поставляет "устаревший установщик", чтобы вы могли установить Заголовки в "старом месте". Чтобы решить проблему, просто запустите это:

sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /

https://silvae86.github.io/sysadmin/mac/osx/mojave/beta/libxml2/2018/07/05/fixing-missing-headers-for-homebrew-in-mac-osx-mojave/