erro fatal gem eventmachine: arquivo 'openssl / ssl.h' não encontrado


265

Acabei de instalar o El Capitan e não consigo instalar o gem eventmachine 1.0.7. opensslestá em 1.0.2a-1. Tentei usar, --with-ssl-dirmas parece ignorado.

Também o denunciei no repositório do github .

Todas as sugestões são realmente apreciadas. Obrigado.

$ 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

Respostas:


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

Você também pode configurar o empacotador assim, mas acho que é superficial

bundle config build.eventmachine --with-cppflags=-I/usr/local/opt/openssl/include

2
Para mim, eu tive que instalar o openssl primeiro antes que isso funcionasse. por exemplo brew install openssl.
Ryan Paredes

1
Se você tiver suas gems definidas para um diretório específico em seu repositório, ou seja vendor/bundle, você precisará executar o bundle config build.GEMNAME--with-cppflags=-I/usr/local/opt/openssl/include. Eu tive que executar a mesma coisa com a gema, pumaentão imagino que isso esteja acontecendo com outras gemas também.
Colton Fent

4
veja a resposta com: 'bundle config build.eventmachine --with-cppflags = -I $ (brew --prefix openssl) / include' do lloeki. Isso funcionou para mim. Esse não.
justingordon

2
Isso funcionou para mim gem install eventmachine -v 1.0.8 -- --with-cppflags=-I/usr/local/opt/openssl/includeno OSX El Capitan 10.11.5
Jagdeep Singh

para mim depois da instalação brew install openssleu tenho que fazerbrew link openssl --force
Sr. Oshiro

231

Ao usar o bundler e o homebrew:

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

1
Para mim, eu tive que instalar o openssl primeiro antes que isso funcionasse. por exemplo brew install openssl
Ryan Walls

Esta versão funcionou para mim para instalar EventMachine 1.0.3 em cima de ruby 2.1.2
dtburgess

Fantástico! Esta é também a maneira de ir para outras pedras preciosas (por exemplo puma) que dependem openssl
morgler

Acho que essa resposta é melhor que a aprovada, porque, como ela é usada bundle installpara executar a instalação real da gem, garante que você instale a versão exata especificada em seu pacote. A resposta aceita instalará a versão mais recente, a menos que você inclua -v x.x.xo gem installcomando manualmente.
Ernesto

115
brew link --force openssl

Então:

gem install eventmachine

Também corrige:

  • taks instalar gem
  • instalação do pacote
  • tarefas de ancinho e rails

PS Provavelmente, você precisará remover e executar brew install opensslnovamente

O problema ocorreu porque a Apple removeu o openssl do OSX (na versão El Captain)


10
Esta foi realmente a solução para El Capitan.
precisa saber é o seguinte

Para esclarecimentos, qual é a ordem da remoção / instalação / link da fermentação?
Abram

7
@ Abram No caso de brew link --force opensslnão ter efeito. Então faça brew uninstall openssl, brew install openssl,brew link --force openssl
itsnikolay

Esta é a resposta em um Mac hoje (El Capitan, 2015-2016). EDIT: Apenas forçando a fermentação openssl. Não precisei especificar uma versão do EventMachine (eu estava instalando o Middleman).
Ryan Bosinger

1
Trabalhou para mim também. Boa decisão.
Kees Briggs

13
gem pristine eventmachine -- --with-cppflags=-I/usr/local/opt/openssl/include

O imaculado remove a gema antiga e a recompila.

A opção de sinalizadores cpp permite que o compilador encontre os cabeçalhos openssl.

Você também pode adicionar a versão se quiser:

gem pristine eventmachine -v '1.0.4' -- --with-cppflags=-I/usr/local/opt/openssl/include

1
por que ao pristineinvés de install?
Ricardo Freitas

4
gem install eventmachine -- --with-cppflags=-I/usr/local/opt/openssl/includetrabalhou para mim.
Dylanthepiguy

8

Se você estiver instalando o EventMachine como uma dependência de outra gema, certifique-se de especificar a versão correta ao instalar a gema manualmente:

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

Em seguida, você pode instalar a gema que estava originalmente tentando instalar:

gem install mailcatcher


4

Uma alternativa é adicionar uma entrada de configuração do bundler para todo o seu perfil de usuário, assim:

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

ele criará um arquivo .bundle / config em seu diretório pessoal, que será usado em todos os seus projetos quando você executar bundle install.


4

Isso resolveu o problema para mim:

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

Fonte: https://github.com/sj26/mailcatcher/issues/254


Excessivamente complicado, por que não definir apenas o var: export PKG_CONFIG_PATH = $ (brew --prefix openssl) / lib / pkgconfig # agora você pode instalar qualquer pacote, adicionar ao .bashrc ou o que você usa
Gerry Gleason

0

Isso funcionou para mim -

    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

OBSERVAÇÃO: - Antes de poder instalar com êxito esta gema, eu precisava fazer algumas coisas. Eles podem se aplicar a você, então liste-os aqui -

1.) saiu da VPN corporativa OU talvez você precise ativar as configurações de proxy

2.) PKG_CONFIG_PATH foi definido como -

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

3.) teve que adicionar o seguinte ao $ PATH no bash_profile (no meu caso ~ / .zshrc)

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

4.) Observe também que, ao contrário de algumas respostas que recebi neste post do SO, e também neste tópico no github-eventmachine , não consegui instalareventmachine

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.

Parece que /usr/local/opt/openssl/includeé o local certo e não /usr/local/includeao especificar o local do openssl.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.