Erreur fatale de gem eventmachine: fichier 'openssl / ssl.h' introuvable

265

Je viens d'installer El Capitan et je ne peux pas installer gem eventmachine 1.0.7. opensslest à 1.0.2a-1. J'ai essayé d'utiliser, --with-ssl-dirmais il semble ignoré.

Je l'ai également signalé à leur dépôt github .

Toutes les suggestions sont vraiment appréciées. Merci.

$ 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
la source

Réponses:

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

Vous pouvez également configurer un bundler comme celui-ci, mais je pense que c'est superficiel

bundle config build.eventmachine --with-cppflags=-I/usr/local/opt/openssl/include
firedev
la source
2
Pour moi, j'ai dû installer openssl avant que cela fonctionne. par exemple brew install openssl.
Ryan Walls
1
Si vos gemmes sont placées dans un répertoire spécifique de votre référentiel, c'est-à-dire que vendor/bundlevous voudrez exécuter le bundle config build.GEMNAME--with-cppflags=-I/usr/local/opt/openssl/include. J'ai dû exécuter la même chose avec la gemme, pumadonc j'imagine que cela se produit également pour d'autres gemmes.
Colton Fent,
4
voir la réponse avec: 'bundle config build.eventmachine --with-cppflags = -I $ (brew --prefix openssl) / include' de lloeki. Cela a fonctionné pour moi. Pas celui-ci.
justingordon
2
Cela a fonctionné pour moi gem install eventmachine -v 1.0.8 -- --with-cppflags=-I/usr/local/opt/openssl/includesur OSX El Capitan 10.11.5
Jagdeep Singh
pour moi après l'installation, brew install opensslje dois le fairebrew link openssl --force
Sr. Oshiro
231

Lorsque vous utilisez bundler et homebrew:

$ bundle config build.eventmachine --with-cppflags=-I$(brew --prefix openssl)/include
$ bundle install
Lloeki
la source
1
Pour moi, j'ai dû installer openssl avant que cela fonctionne. par exemple brew install openssl
Ryan Walls
Cette version a fonctionné pour moi pour installer eventmachine 1.0.3 sur ruby ​​2.1.2
dtburgess
Fantastique! C'est également la voie à suivre pour d'autres gemmes (par exemple, les puma) qui dépendent de openssl
morgler
Je pense que cette réponse est meilleure que celle approuvée, car puisqu'elle utilise bundle installpour effectuer l'installation réelle de la gemme, elle garantit que vous installerez la version exacte spécifiée dans votre bundle. La réponse acceptée installera la dernière version, sauf si vous incluez manuellement la -v x.x.xdans la gem installcommande.
Ernesto
115
brew link --force openssl

Ensuite:

gem install eventmachine

Il corrige également:

  • installation de pierres précieuses taks
  • installation du bundle
  • tâches de râteau et de rails

PS Vous devrez probablement supprimer et exécuter à brew install opensslnouveau

Le problème survient car Apple a supprimé openssl d'OSX (dans la version El Captain)

itsnikolay
la source
10
C'était en effet la solution pour El Capitan.
jhedstrom
Pour des éclaircissements, quel est l'ordre de brassage supprimer / installer / lien
Abram
7
@Abram En cas de brew link --force openssln'a eu aucun effet. Ensuite , faites brew uninstall openssl, brew install openssl,brew link --force openssl
itsnikolay
C'est la réponse sur un Mac aujourd'hui (El Capitan, 2015-2016). EDIT: Forcer juste le brew openssl. Je n'avais pas besoin de spécifier une version d'EventMachine (j'installais Middleman).
Ryan Bosinger
1
A également fonctionné pour moi. Bon appel.
Kees Briggs
13
gem pristine eventmachine -- --with-cppflags=-I/usr/local/opt/openssl/include

vierge supprime l'ancien joyau et le recompile.

L'option cpp flags permet au compilateur de trouver les en-têtes openssl.

Vous pouvez également ajouter la version si vous le souhaitez:

gem pristine eventmachine -v '1.0.4' -- --with-cppflags=-I/usr/local/opt/openssl/include
jLuc
la source
1
pourquoi pristineau lieu de install?
Ricardo Freitas
4
gem install eventmachine -- --with-cppflags=-I/usr/local/opt/openssl/includetravaillé pour moi.
Dylanthepiguy
8

Si vous installez EventMachine en tant que dépendance d'une autre gemme, assurez-vous de spécifier la bonne version lorsque vous installez manuellement la gemme:

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

Ensuite, vous pouvez installer la gemme que vous essayiez à l'origine d'installer:

gem install mailcatcher
Andrew
la source
8

J'essayais d'installer la v 1.0.3 et cela a fonctionné pour moi.

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

Ces discussions ont été très utiles. https://github.com/eventmachine/eventmachine/issues/602

Ana Isabel
la source
2
Vous avez besoin d'un hypen avant I/usr/local/opt/openssl/include. C'est un personnage donc stackoverflow ne me laisse pas le modifier
MaicolBen
1
Correction de @MaicolBen
blockloop
4

Une alternative consiste à ajouter une entrée de configuration de bundler pour l'ensemble de votre profil utilisateur, comme ceci:

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

il va créer un fichier .bundle / config dans votre répertoire personnel, qui est ensuite utilisé dans tous vos projets lorsque vous exécutez bundle install.

Fredrik Bränström
la source
4

Cela a résolu le problème pour moi:

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

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

Giovanni Benussi
la source
Inutilement compliqué, pourquoi ne pas simplement définir la variable var: export PKG_CONFIG_PATH = $ (brew --prefix openssl) / lib / pkgconfig # maintenant vous pouvez installer tous les packages, les ajouter à .bashrc ou ce que vous utilisez
Gerry Gleason
0

Cela a fonctionné pour moi -

    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

REMARQUE:- Avant de pouvoir installer avec succès ce joyau, je devais faire quelques choses. Celles-ci peuvent s'appliquer à vous, alors inscrivez-les ici -

1.) vous avez quitté le VPN d'entreprise OU vous devrez peut-être activer les paramètres de proxy

2.) PKG_CONFIG_PATH a été défini sur -

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

3.) a dû ajouter ce qui suit à $ PATH dans bash_profile (dans mon cas ~ / .zshrc)

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

4.) Notez également que contrairement à certaines réponses que j'ai reçues dans ce message SO, et également à ce fil sur github-eventmachine , je n'ai pas pu installereventmachine

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.

Il semble que ce /usr/local/opt/openssl/includesoit le bon emplacement et non /usr/local/includelors de la spécification de l'emplacement openssl.

ARCHE
la source