2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

phusion/passenger-ruby25イメージでruby2.5.1を利用できるようにする

Last updated at Posted at 2018-06-17

はじめに

Ruby 2.5.1 + Rails 5.2 環境で作成したアプリをphusion/passenger-ruby25イメージを利用してコンテナ化した際に何箇所か引っかかったところがあったので備忘録として投稿します。

問題点

Ruby 2.5.1 環境で作成したアプリをphusion/passenger-ruby25イメージを利用してビルドすると、bundle install時に失敗する。

$ docker build -t rails-image .

...
Step 13/19 : RUN bundle install
 ---> Running in 8c0c00cc6fd1
Required ruby-2.5.1 is not installed.
To install do: 'rvm install "ruby-2.5.1"'
Don't run Bundler as root. Bundler can ask for sudo if it is needed, and
installing your bundle as root will break this application for all non-root
users on this machine.
Your Ruby version is 2.5.0, but your Gemfile specified 2.5.1
The command '/bin/sh -c bundle install' returned a non-zero code: 18

解決方法

コンテナビルド時に Ruby 2.5.1 をインストールして、デフォルトで利用するように指定する。


準備

phusion/passenger-ruby25イメージで切り替え/インストール可能なRubyのバージョンを確認する。

# コンテナ名 tmpで
# phusion/passenger-ruby25:latest
# イメージを起動する

$ docker run phusion/passenger-ruby25:latest

# 停止させるときは「Ctrl + C」
# 別のターミナルで、
# コンテナIDを確認

$ docker ps

CONTAINER ID        IMAGE                             COMMAND             CREATED             STATUS              PORTS               NAMES
57447e5d7173        phusion/passenger-ruby25:latest   "/sbin/my_init"     1 second ago        Up 4 seconds        80/tcp, 443/tcp     hardcore_jang

# 切り替え可能なRubyバージョンを確認する
# 補足:<CONTAINER ID>は`docker ps`で確認した値に変更する

$ docker exec -it <CONTAINER ID> bash -l -c 'rvm list'

rvm rubies

=* ruby-2.5.0 [ x86_64 ]

# => - current
# =* - current && default
#  * - default

Dockerfile

調査時点のphusion/passenger-ruby25イメージにはRuby 2.5.1がインストールされてなかったので、2.5.1をインストールしてデフォルトで利用するようにDockerfileで指定する。

Dockerfile
FROM phusion/passenger-ruby25:latest

# Ruby 2.5.1 をインストール
RUN bash -lc 'rvm install 2.5.1'
# Ruby 2.5.1 をデフォルトで利用するように設定
RUN bash -lc 'rvm --default use ruby-2.5.1'

# 省略

バージョン確認

コンテナを起動して、Rubyのバージョンを確認する

# イメージ名 passenger-ruby251 を指定してビルド
# 補足:Dockerfileが配置されてるディレクトリで実行する

$ docker build -t passenger-ruby251 .

...
Successfully built d7b5b31b09c0
Successfully tagged passenger-ruby251:latest

# イメージを起動する

$ docker run passenger-ruby251
# 別のターミナルで、
# コンテナIDを確認

$ docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
106fcca82a3b        passenger-ruby251   "/sbin/my_init"     37 seconds ago      Up 40 seconds       80/tcp, 443/tcp     friendly_lalande

# 切り替え可能なRubyバージョンを確認する
# 補足:<CONTAINER ID>は`docker ps`で確認した値に変更する

$ docker exec -it <CONTAINER ID> bash -l -c 'ruby -v'

ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]

注意事項

デフォルトで利用するRubyバージョンを切り替えたので、nginxのコンフィグに記述するpassenger_rubyのパスでは/usr/bin/rubyを指定する。

webapp.conf
server {

  # 省略

  # If this is a Ruby app, specify a Ruby version:
  # passenger_ruby /usr/bin/ruby2.5;
  # =>
  passenger_ruby /usr/bin/ruby; 

  # 省略

}
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?