Неустранимая ошибка gem eventmachine: файл 'openssl / ssl.h' не найден

265

Только что установил El Capitan и не могу установить гем eventmachine 1.0.7. opensslв 1.0.2a-1. Пытался использовать, --with-ssl-dirно, кажется, игнорируется.

Об этом сообщили в репозитории Github .

Любые предложения действительно приветствуются. Спасибо.

$ ls /usr/local/Cellar/openssl/1.0.2a-1/include/openssl/ssl.h
/usr/local/Cellar/openssl/1.0.2a-1/include/openssl/ssl.h

$ gem install eventmachine -v '1.0.7' -- --with-ssl-dir=/usr/local/Cellar/openssl/1.0.2a-1/include
/Users/pain/.rbenv/versions/2.1.2/bin/ruby -r ./siteconf20150612-56154-1hsjz2n.rb extconf.rb --with-ssl-dir=/usr/local/Cellar/openssl/1.0.2a-1/include
checking for rb_trap_immediate in ruby.h,rubysig.h... no
checking for rb_thread_blocking_region()... yes
checking for ruby/thread.h... yes
checking for rb_thread_call_without_gvl() in ruby/thread.h... yes
checking for inotify_init() in sys/inotify.h... no
checking for __NR_inotify_init in sys/syscall.h... no
checking for writev() in sys/uio.h... yes
checking for rb_thread_fd_select()... yes
checking for rb_fdset_t in ruby/intern.h... yes
checking for rb_wait_for_single_fd()... yes
checking for rb_enable_interrupt()... no
checking for rb_time_new()... yes
checking for sys/event.h... yes
checking for sys/queue... yes
checking for clock_gettime()... no
checking for gethrtime()... no
creating Makefile

make "DESTDIR=" clean

make "DESTDIR="
compiling binder.cpp
In file included from binder.cpp:20:
./project.h:116:10: fatal error: 'openssl/ssl.h' file not found
#include <openssl/ssl.h>
         ^
1 error generated.
make: *** [binder.o] Error 1

make failed, exit code 2
firedev
источник

Ответы:

513
$ gem install eventmachine -- --with-cppflags=-I/usr/local/opt/openssl/include                                                                                                             
Building native extensions with: '--with-cppflags=-I/usr/local/opt/openssl/include'
This could take a while...
Successfully installed eventmachine-1.0.8
1 gem installed

Вы также можете настроить упаковщик, как это, но я думаю, что это поверхностно

bundle config build.eventmachine --with-cppflags=-I/usr/local/opt/openssl/include
firedev
источник
2
Мне пришлось сначала установить openssl, прежде чем это сработало. например brew install openssl.
Райан Уоллс
1
Если у вас есть ваши драгоценные камни в определенном каталоге в вашем репо, то есть vendor/bundleвы захотите запустить bundle config build.GEMNAME--with-cppflags=-I/usr/local/opt/openssl/include. Мне пришлось выполнить то же самое с драгоценным камнем, pumaпоэтому я думаю, что это происходит и с другими драгоценными камнями.
Колтон Фент
4
см. ответ с помощью: 'bundle config build.eventmachine --with-cppflags = -I $ (brew --prefix openssl) / include' из lloeki. Это сработало для меня. Не этот.
Джастингордон
2
Это сработало для меня gem install eventmachine -v 1.0.8 -- --with-cppflags=-I/usr/local/opt/openssl/includeна OSX El Capitan 10.11.5
Джагдип Сингх,
для меня после установки brew install opensslя должен сделатьbrew link openssl --force
старший Oshiro
231

При использовании bundler и homebrew:

$ bundle config build.eventmachine --with-cppflags=-I$(brew --prefix openssl)/include
$ bundle install
Lloeki
источник
1
Мне пришлось сначала установить openssl, прежде чем это сработало. Например brew install openssl
Райан Уоллс
Эта версия работала для меня, чтобы установить eventmachine 1.0.3 поверх ruby ​​2.1.2
dtburgess
Фантастика! Это также путь для других драгоценных камней (например, пумы), которые зависят от openssl
morgler
Я думаю, что этот ответ лучше, чем утвержденный, потому что, поскольку он использует bundle installдля фактической установки gem, он гарантирует, что вы установите точную версию, указанную в вашем комплекте. Принятый ответ установит последнюю версию, если вы не включите -v x.x.xв gem installкоманду вручную.
Эрнесто
115
brew link --force openssl

Затем:

gem install eventmachine

Это также исправляет:

  • gem install taks
  • комплектация
  • грабли и рельсы задачи

PS Вероятно, вам нужно будет удалить и запустить brew install opensslснова

Проблема возникает из-за того, что Apple удалила openssl из OSX (в сборке El Captain)

itsnikolay
источник
10
Это было действительно исправление на El Capitan.
Jhedstrom
Для уточнения, каков порядок заваривания, удаления / установки / ссылки
Abram
7
@Abram В случае brew link --force opensslне имел никакого эффекта. Тогда сделайте brew uninstall openssl, brew install openssl,brew link --force openssl
itsnikolay
Это ответ на Mac сегодня (El Capitan, 2015-2016). РЕДАКТИРОВАТЬ: Просто заставляя заваривать openssl. Мне не нужно было указывать версию EventMachine (я устанавливал Middleman).
Райан Босингер
1
У меня тоже сработало. Хороший звонок.
Кис Бриггс
13
gem pristine eventmachine -- --with-cppflags=-I/usr/local/opt/openssl/include

нетронутый удаляет старый драгоценный камень и перекомпилирует его.

Опция cpp flags позволяет компилятору находить заголовки openssl.

Вы также можете добавить версию, если вам нравится:

gem pristine eventmachine -v '1.0.4' -- --with-cppflags=-I/usr/local/opt/openssl/include
jLuc
источник
1
почему pristineвместо install?
Рикардо Фрейтас
4
gem install eventmachine -- --with-cppflags=-I/usr/local/opt/openssl/includeработал на меня.
Dylanthepiguy
8

Если вы устанавливаете EventMachine в качестве зависимости от другого гема, обязательно укажите правильную версию при установке гема вручную:

gem install eventmachine -v 1.0.5 -- --with-cppflags=-I$(brew --prefix openssl)/include

Затем вы можете установить гем, который вы изначально пытались установить:

gem install mailcatcher
Андрей
источник
8

Я пытался установить v 1.0.3, и это сработало для меня.

gem install eventmachine -v '1.0.3' -- --with-cppflags=-I/usr/local/opt/openssl/include

Эти обсуждения были очень полезны. https://github.com/eventmachine/eventmachine/issues/602

Ана Изабель
источник
2
Вам нужен гипен до I/usr/local/opt/openssl/include. Это один символ, поэтому stackoverflow не позволяет мне редактировать его
MaicolBen
1
Исправлено @MaicolBen
blockloop
4

Одна альтернатива - добавить запись конфигурации для всего профиля пользователя, например:

cd ~
bundle config build.eventmachine --with-cppflags=-I$(brew --prefix openssl)/include

он создаст файл .bundle / config в вашем домашнем каталоге, который затем будет использоваться во всех ваших проектах при запуске bundle install.

Фредрик Бранстрем
источник
4

Это решило проблему для меня:

PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig" gem install eventmachine -v "1.0.8"

Источник: https://github.com/sj26/mailcatcher/issues/254

Джованни Бенусси
источник
Неоправданно сложно, почему бы просто не установить переменную var: export PKG_CONFIG_PATH = $ (brew --prefix openssl) / lib / pkgconfig #, теперь вы можете устанавливать любые пакеты, добавлять в .bashrc или использовать
Gerry Gleason
0

Это сработало для меня -

    gem install eventmachine -v '1.0.7' -- --debug --backtrace --with-cppflags=-I/usr/local/opt/openssl/include --with-ldflags=-L/usr/local/opt/openssl/lib
    Building native extensions with: '--debug --backtrace --with-cppflags=-I/usr/local/opt/openssl/include --with-ldflags=-L/usr/local/opt/openssl/lib'
    This could take a while...
    Successfully installed eventmachine-1.0.7
    Parsing documentation for eventmachine-1.0.7
    Installing ri documentation for eventmachine-1.0.7
    Done installing documentation for eventmachine after 9 seconds
    1 gem installed

ПРИМЕЧАНИЕ: - Прежде чем я смог успешно установить этот драгоценный камень, мне пришлось сделать несколько вещей. Это может относиться к вам, поэтому перечислите их здесь -

1.) вышел из корпоративного VPN или, возможно, вам придется включить настройки прокси

2.) PKG_CONFIG_PATH был установлен в -

echo $PKG_CONFIG_PATH
/usr/local/opt/openssl/lib/pkgconfig

3.) пришлось добавить следующее в $ PATH в bash_profile (в моем случае ~ / .zshrc)

export PATH="/usr/local/opt/openssl/bin:$PATH"

4.) Также обратите внимание, что вопреки некоторым ответам, которые я получил в этом SO сообщении, а также в этой теме на github-eventmachine , я не смог установитьeventmachine

gem install eventmachine -v '1.0.7' -- --debug --backtrace --with-cppflags=-I/usr/local/include --with-ldflags=-L/usr/local/lib
Fetching: eventmachine-1.0.7.gem (100%)
Building native extensions with: '--debug --backtrace --with-cppflags=-I/usr/local/include --with-ldflags=-L/usr/local/lib'
This could take a while...
ERROR:  Error installing eventmachine:
    ERROR: Failed to build gem native extension.

Кажется, /usr/local/opt/openssl/includeэто правильное местоположение, а не /usr/local/includeпри указании местоположения openssl.

КОВЧЕГ
источник