1
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.

dockerでbundle installしてMySQL2をインストールしようとしたらハマった話

Last updated at Posted at 2019-04-09

環境

OS:macOSMojave
バージョン管理:rbenv
ruby version: 2.6.0

##症状
自分はDocker環境でこの事象が発生しましたがDocker環境以外でも同じ問題でつまづいたことがあります。その時とはややエラーの内容が異なりましたので別の解決方法で解決しました。
その際に参考にしたのはこちらの記事で解決させていただきました。

エラーの内容がld: library not found for -lsslで止まってしまっている場合などは上記の記事で解決できると思います。

今回の事例は

$ docker-compose run --rm app ./bin/bundle install --path vendor/bundle

Dockerでbundle installをしようとしたら

Errno::EACCES: Permission denied @ rb_sysopen -
/app_name/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.2/CHANGELOG.md
An error occurred while installing mysql2 (0.5.2), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.5.2' --source 'https://rubygems.org/'` succeeds before
bundling.

というエラーで弾かれてしまいました。

原因

Permission deniedと出てるのでどうやら権限周りの問題が原因になってそうです。

まず最初に疑ったのはrbenvではなくsystemのrubyやgemを使っているのではないかと思い確認してみました。

$ which ruby
/Users/username/.rbenv/shims/ruby

$ which gem
/Users/username/.rbenv/shims/gem

どうやらrbenvで管理されているのでこれは問題なさそう。

そしてめげずに調べたらこんな記事がありました。

確かに前にsudoつけて色々インストールした記憶があるなと思い色々な箇所の権限を確認してみましたが問題になってるのは上記のエラー内容に記載されてる/app_name/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.2/以下っぽい。

コマンドで権限を確認してみる

$ ls -ltr vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.2
total 64
-rw-r--r--   1 root  staff     87  4  5 22:17 CHANGELOG.md
-rw-r--r--   1 root  staff   1078  4  5 22:17 LICENSE
-rw-r--r--   1 root  staff  24534  4  5 22:17 README.md
drwxr-xr-x   4 root  staff    128  4  5 22:17 examples
drwxr-xr-x   3 root  staff     96  4  5 22:17 ext
drwxr-xr-x   4 root  staff    128  4  5 22:17 lib
drwxr-xr-x  10 root  staff    320  4  5 22:17 spec
drwxr-xr-x   6 root  staff    192  4  5 22:17 support

やはりinstall時にsudoをつけてしまっていたみたいですね。。。。

解決策

先ほどの記事内の手順に沿って

$ sudo chown -R (ユーザー名):staff vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.2

を実行し、ディレクトリの権限をユーザーに戻す。

そして再度

$ docker-compose run --rm app ./bin/bundle install --path vendor/bundle

すると

Fetching mysql2 0.5.2
Installing mysql2 0.5.2 with native extensions

無事にインストールができました。

自分は普段はiOS,Androidが専門なので中々つまづきましたが今後サーバーサイドも結構やることがありそうなので忘備録として書きました。

1
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
1
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?