初心者が、基本も学ばず意味も理解せずsudoを乱用してファイルシステムの所有者がめちゃくちゃ。
【Rails】bundle install時のBundler::PermissionError
【解決したいこと】
bundle install で gem の'pg'をインストールしたいです。
renderでデプロイ予定で、本番環境ではPostgreSQLを使用したいため。
Ruby 2.6.8
bundler 2.4.6
renderでデプロイするにあたり、まずpostgresqlをbrewでinstallしました。
versionは以下の通りです。
% psql --version
psql (PostgreSQL) 14.7 (Homebrew)
最近、bundlerのversionを2.1.4 -> 2.4.6にしたからなのか
以前開発したアプリケーションではbundle installできていたのに、
なぜか今回はできない・・・。
エラーは以下の通りです。
Bundler::PermissionError: There was an error while trying to create
`/Users/myname/.rbenv/versions/2.6.8/lib/ruby/gems/2.6.0/extensions/x86_64-darwin-21/2.6.0/pg-1.4.5`.It is likely that you need
to grant executable permissions for all parent directories and write permissions for `/Users/myname/.rbenv/versions/2.6.8/lib/ruby/gems/2.6.0/extensions/x86_64-darwin-21/2.6.0`.
どうも書き込み権限がなさそうな意味だと思うので、下記コマンドで権限を確認しました。
% ls -l /Users/myname/.rbenv/versions/2.6.8/lib/ruby/gems/2.6.0/extensions/x86_64-darwin-21/2.6.0
total 0
drwxr-xr-x 5 root staff 160 1 29 19:37 bcrypt-3.1.18
drwxr-xr-x 5 root staff 160 1 29 19:39 bindex-0.8.1
drwxr-xr-x 5 root staff 160 2 1 10:52 bootsnap-1.15.0
drwxr-xr-x 5 root staff 160 2 1 10:53 bootsnap-1.16.0
drwxr-xr-x 5 root staff 160 1 29 19:40 byebug-11.1.3
drwxr-xr-x 6 root staff 192 1 29 19:40 date-3.3.3
drwxr-xr-x 6 root staff 192 1 29 19:41 ffi-1.15.5
drwxr-xr-x 6 root staff 192 1 29 19:41 kgio-2.11.4
drwxr-xr-x 6 root staff 192 1 29 19:39 msgpack-1.6.0
drwxr-xr-x 6 root staff 192 2 1 10:53 mysql2-0.5.5
drwxr-xr-x 6 root staff 192 2 1 10:51 nio4r-2.5.8
drwxr-xr-x 6 root staff 192 2 1 10:53 puma-3.12.6
drwxr-xr-x 6 root staff 192 2 10 18:59 puma-6.0.2
drwxr-xr-x 6 root staff 192 1 29 19:45 racc-1.6.2
drwxr-xr-x 6 root staff 192 2 1 10:54 raindrops-0.20.0
drwxr-xr-x 5 root staff 160 2 1 10:54 redcarpet-3.6.0
drwxr-xr-x 6 root staff 192 2 1 10:54 unicorn-5.4.1
drwxr-xr-x 5 root staff 160 2 1 10:52 websocket-driver-0.7.5
【仮説】
私の仮説としては、やはり『w』が抜けていて書き込み権限がないことが原因?だと思うのですが、
ここからどうやって権限を設定するのかわからない状態です。
または仮説そのものが間違っている?
初学者でまだこの辺りを理解できていない状態です・・・。
どなたかご指導頂けないでしょうか?
よろしくお願い致します。
2Answer
Comments
@hilite
Questionerコメントありがとうございます。以前、謝ってsudoコマンド使ってしまいました。おっしゃる通り、理解できていない状態にあったと思います。学習し直します。
/Users/myname/.rbenv 以下のファイルは所有ユーザーが myname になっているべきですが、 root になっています。どこかのタイミングで sudo bundle install ...
や sudo gem install ...
のように sudo
をつけてコマンドを実行されたのではないでしょうか。基本的に rbenv を使っていれば sudo を使う必要はありません。
修復するにはファイルの所有ユーザーを myname に一括変更します。 chown -R myname /Users/myname/.rbenv
を実行してください。
Comments
@hilite
Questionerコメントありがとうございます!
ご指摘の通り、以前に謝ってsudoをつけて実行したことがあったと思います。
私はsudoの意味や正しい使い方を学び直す必要があると感じています。
ご教授いただいたコマンドを実行したところ、以下のようになりました。(一部抜粋)
```
chown: /Users/myname/.rbenv/versions/2.6.8/lib/ruby/gems/2.6.0/gems/bcrypt-3.1.18: Operation not permitted
```
その後、改めてbundle install を実行しましたが、全く同じエラー文が出てきました。
再度、『ls -l』で所有者の確認をしたところ、rootのまま変わっていませんでした。
自分が学習するべき話ですが、もしもお力を借りれるのであればコメントよろしくお願い致します。- 失礼しました、 sudo chown ... で実行してください。 root が所有しているファイルを変更するには sudo をつけて root ユーザーとして chown する必要があるからです。
@hilite
Questionerありがとうございます!
早速やってみたところroot -> mynameに変更できていました。そしてbundle installで'pg'をinstallすることができました。ありがとうございます。
また、自分の勉強不足を反省して今後に活かしていきます。