19435
$ which openssl  
/usr/local/bin/openssl

$ ruby -v  
ruby 2.0.0p481

$ openssl version  
OpenSSL 1.0.2d 9 Jul 2015

```

    An error occurred while installing puma (2.11.0), and Bundler cannot continue.
    Make sure that `gem install puma -v '2.11.0'` succeeds before bundling.
    
```

環境構築をする際に、pumaのインストールで躓いております。

調べていると似たような問題を抱えている人がいたため、それを元に実行していたのですが、  
結果的にはダメでした。

<https://stackoverflow.com/questions/27465544/cannot-build-puma-gem-on-os-x-
yosemite>

<https://stackoverflow.com/questions/30143180/puma-gem-failed-to-build-gem-
native-extension>

<https://stackoverflow.com/questions/20294199/cannot-install-puma-gem-on-ruby-
on-rails>

ssl周りのエラーなのかと思い以下も実行しました。

$ brew link openssl --force  
$ brew upgrade openssl

どなたか原因がわかる方がいらっしゃいましたら、ご助言いただけないでしょうか？

宜しくお願いします。

エラー文言

```

    Building native extensions.  This could take a while...
    ERROR:  Error installing puma:
            ERROR: Failed to build gem native extension.
    
        /Users/home/sandbox/usr/bin/ruby extconf.rb
    checking for SSL_CTX_new() in -lssl... no
    checking for SSL_CTX_new() in -lssleay32... no
    *** extconf.rb failed ***
    Could not create Makefile due to some reason, probably lack of necessary
    libraries and/or headers.  Check the mkmf.log file for more details.  You may
    need configuration options.
    
    Provided configuration options:
            --with-opt-dir
            --with-opt-include
            --without-opt-include=${opt-dir}/include
            --with-opt-lib
            --without-opt-lib=${opt-dir}/lib
            --with-make-prog
            --without-make-prog
            --srcdir=.
            --curdir
            --ruby=/Users/home/sandbox/usr/bin/ruby
            --with-puma_http11-dir
            --without-puma_http11-dir
            --with-puma_http11-include
            --without-puma_http11-include=${puma_http11-dir}/include
            --with-puma_http11-lib
            --without-puma_http11-lib=${puma_http11-dir}/lib
            --with-ssllib
            --without-ssllib
            --with-ssleay32lib
            --without-ssleay32lib
    
    extconf failed, exit code 1
    
    Gem files will remain installed in /Users/home/sandbox/usr/lib/ruby/gems/2.1.0/gems/puma-2.10.2 for inspection.
    Results logged to /Users/home/sandbox/usr/lib/ruby/gems/2.1.0/extensions/x86_64-darwin-14/2.1.0/puma-2.10.2/gem_make.out
    
    
```
CC BY-SA 3.0
2015-11-29T07:31:15.490
19430
2015-12-02T22:20:24.133
2017-05-23T12:38:55.250
-1
13175
question
ruby-on-rails ruby rubygems
yosemiteでpumaのgemがインストール出来ない。おそらくSSL周りのエラーですが、原因がわかりません。
こちらの環境ではEl capitan + Ruby 2.0.0-p481でpuma 2.11.0をインストールしようとしたところ、以下のエラーが出ました。

```

    $ gem install puma -v '2.11.0'
    Fetching: rack-1.6.4.gem (100%)
    Successfully installed rack-1.6.4
    Fetching: puma-2.11.0.gem (100%)
    Building native extensions.  This could take a while...
    ERROR:  Error installing puma:
        ERROR: Failed to build gem native extension.
    
        /Users/jit/.rbenv/versions/2.0.0-p481/bin/ruby extconf.rb
    checking for BIO_read() in -lcrypto... yes
    checking for SSL_CTX_new() in -lssl... yes
    creating Makefile
    
    make "DESTDIR="
    compiling http11_parser.c
    compiling io_buffer.c
    io_buffer.c:119:21: warning: passing 'uint8_t *' (aka 'unsigned char *') to parameter of type 'const char *' converts between pointers to integer types with different sign [-Wpointer-sign]
      return rb_str_new(b->top, b->cur - b->top);
                        ^~~~~~
    /Users/jit/.rbenv/versions/2.0.0-p481/include/ruby-2.0.0/ruby/intern.h:674:29: note: passing argument to parameter here
    VALUE rb_str_new(const char*, long);
                                ^
    1 warning generated.
    compiling mini_ssl.c
    In file included from mini_ssl.c:3:
    /Users/jit/.rbenv/versions/2.0.0-p481/include/ruby-2.0.0/ruby/backward/rubyio.h:2:2: warning: use "ruby/io.h" instead of "rubyio.h" [-W#warnings]
    #warning use "ruby/io.h" instead of "rubyio.h"
     ^
    mini_ssl.c:4:10: fatal error: 'openssl/bio.h' file not found
    #include <openssl/bio.h>
             ^
    1 warning and 1 error generated.
    make: *** [mini_ssl.o] Error 1
    
    
    Gem files will remain installed in /Users/jit/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/puma-2.11.0 for inspection.
    Results logged to /Users/jit/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/puma-2.11.0/ext/puma_http11/gem_make.out
    
```

しかし、最新の2.15.3は問題なくインストールできました。

```

    $ gem install puma -v '2.15.3'
    Fetching: puma-2.15.3.gem (100%)
    Building native extensions.  This could take a while...
    Successfully installed puma-2.15.3
    1 gem installed
    
```

なので、可能であればpumaのバージョンを上げる、というのが一つの解決策になるかもしれません。

また、pumaのバージョンが上げられないのであれば、一度Ruby
2.0.0-p481を再インストールしてからpumaをインストールすると状況が改善するかもしれません。（こちらはちょっと当てずっぽうな提案ですが）

## EDIT

> ​バージョン指定せずにインストールした際に、どのバージョンがインストールされるのかという情報はどこに載っているのでしょうか？

公式ドキュメントを探せば載っているかもしれませんが、ちょっと調べていません。  
おそらくこういう動きになっていると思います。（`bundle install`した場合を想定）

### 1\. Gemfile.lockに対象のgemが記載されている場合

Gemfile.lockで指定されているバージョンがインストールされる

### 2\. Gemfile.lockに対象のgemが記載されていない、またはGemfile.lock自体がない場合

同じRubyバージョンですでにそのgemがローカルマシンに存在し、かつ他のgemとの依存関係面でも問題がない場合、そのgemが使われる。

それ以外の場合は、依存関係上問題のない範囲でそのgemの最新版がダウンロード＆インストールされる。

ただし、Gemfile内でバージョンが指定されていれば（`gem 'puma', '2.15.3'`等）、指定されたバージョンのgemがインストールされる。

* * *

ただし、僕の経験上たぶんこうだろうと考えているだけで公式な情報ではありません。  
正確に知りたい場合は自分でちゃんと調べた方が良いと思います。
CC BY-SA 3.0
2015-11-29T10:03:01.043
19435
2015-12-02T22:20:24.133
2015-12-02T22:20:24.133
85
85
19430
answer