文系卒のWebエンジニアの成長と備忘録
エンジニア経験を生かして発信するメディアサイト

【Ruby on Rails】 Permission denied @ dir_s_mkdir の解消法

エラー 解消

こんにちはYsです。
Laravelの勉強と並行しながら、Ruby on Railsの勉強をしています。

先日、RailsでWebアプリケーションを初回作成する時に、rails new コマンドを使用しますが、
その際に【Errno::EACCES: Permission denied @ dir_s_mkdir】といったエラーに悩まされたのでその解消方を記載していきます。
解消法のみ知りたいという方は、[3.解消法]の部分からどうぞ。

  1. エラーの内容
  2. 原因
  3. 解消法

スポンサードサーチ



エラーの内容

username:ProjectDir username $ rails new ProjectName
*** 省略 ***
Errno::EACCES: Permission denied @ dir_s_mkdir -
/Users/username/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/extensions/x86_64-darwin-18/2.5.0-static/nokogiri-1.10.1
An error occurred while installing nokogiri (1.10.1), and Bundler
cannot continue.
Make sure that `gem install nokogiri -v '1.10.1' --source
'https://rubygems.org/'` succeeds before bundling.
In Gemfile:
  rails was resolved to 5.2.2, which depends on
    actioncable was resolved to 5.2.2, which depends on
      actionpack was resolved to 5.2.2, which depends on
        actionview was resolved to 5.2.2, which depends on
          rails-dom-testing was resolved to 2.0.3, which depends on
            nokogiri
         run  bundle exec spring binstub --all
bundler: command not found: spring
Install missing gem executables with `bundle install`

Railsの新しいプロジェクトを作成する際に、
rails new  プロジェクト名といったコマンドを打ちます。
その際に、途中までのインストールは無事に終了しますが、
Errno::EACCES: Permission denied @ dir_s_mkdir
An error occurred while installing nokogiri (1.10.1), and Bundler
cannot continue.

といったエラーで終了してしまいます。

エラーの原因

上記のエラーで着目したいのは、以下の部分

Errno::EACCES: Permission denied @ dir_s_mkdir

Permisson deniedなので何かしらの権限が問題で発生していることが分かります。
そのため、権限の確認をしてみます。
以下の手順で行います。

  • どこの権限を確認するのか
  • 権限を実際に確認する

どこの権限を確認するのか

Errno::EACCES: Permission denied @ dir_s_mkdir -
/Users/username/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/extensions/x86_64-darwin-18/2.5.0-static/nokogiri-1.10.1

といったエラー内容から2.5.0-static/nokogiri-1.10.1の部分に権限がないと推測できます。

権限を実際に確認する

実際にファイルの権限がどうなっているのかを確認します。
上記の2.5.0-staticのディレクトリ下のファイルの権限を以下のコマンドで確認してみます。

ls -la /Users/username/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/extensions/x86_64-darwin-18/2.5.0-static
username:~ username$ ls -la /Users/username/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/extensions/x86_64-darwin-18/2.5.0-static
total 0
drwxr-xr-x  16 root  staff  512  2  2 23:50 .
drwxr-xr-x   3 root  staff   96 12  8 12:18 ..
drwxr-xr-x   6 root  staff  192 12  8 12:36 bigdecimal-1.3.5
drwxr-xr-x   7 root  staff  224  2  2 23:27 bigdecimal-1.4.3
drwxr-xr-x   5 root  staff  160  2  2 23:50 bindex-0.5.0
drwxr-xr-x   6 root  staff  192  2  2 23:28 date-2.0.0
drwxr-xr-x   6 root  staff  192 12  8 12:36 etc-1.0.1
drwxr-xr-x   6 root  staff  192  2  2 23:28 io-console-0.4.7
drwxr-xr-x   6 root  staff  192 12  8 12:19 nio4r-2.3.1
drwxr-xr-x   6 root  staff  192  2  2 23:33 nokogiri-1.10.1
drwxr-xr-x   6 root  staff  192 12  8 12:19 nokogiri-1.8.5
drwxr-xr-x   6 root  staff  192 12  8 12:37 openssl-2.1.2
drwxr-xr-x   6 root  staff  192 12  8 12:37 psych-3.0.3
drwxr-xr-x   6 root  staff  192  2  2 23:33 psych-3.1.0
drwxr-xr-x   5 root  staff  160 12  8 16:58 stringio-0.0.2
drwxr-xr-x   5 root  staff  160 12  8 12:19 websocket-driver-0.7.0

全ての権限が【root】になっています。これが根本的な原因と思われます。
最初のアプリケーションを作成するコマンドの実行者は、自分。
つまり、usernameで実行されています。
そのため、root権限のものは権限がないとされ、拒否されエラーが出力されるといった感じです。

この根本的な原因は上位のディレクトリの.rbenv/をsudo(root権限)でインストール、
ないしは何かしらの実行をしたことによるものが有力でした。
子ディレクトリ、ファイルにまで、root権限が付与されるのは勉強不足でした。

上記の理由から、権限の変更を行って自分「username」に権限を変更してあげることが対処法です。

スポンサードサーチ



エラーの対処法

結論から書くと以下のコマンドを打てば上記のエラーは解消します。
※『username』の部分は、自身のPCのユーザー名に変換してください。
また、.rbenvの階層も自身で配置したPATHに変更してください。

sudo chown -R username /Users/username/.rbenv

chownコマンドで権限を自分「username」に変更し、
オプションコマンド「-R」を付与して、.rbenv/より下のディレクトリ、ファイルを全ての権限を変更する。
といった内容になります。

何かしらが原因で、.rbenv/を変更したくない場合、実際にエラーが起きているディレクトリのみの変更でも大丈夫と思われます。

念の為、上記のコマンドを実行後、再度権限を確認してみます。

username:~ username$ ls -la /Users/username/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/extensions/x86_64-darwin-18/2.5.0-static
total 0
drwxr-xr-x  16 username  staff  512  2  2 23:50 .
drwxr-xr-x   3 username  staff   96 12  8 12:18 ..
drwxr-xr-x   6 username  staff  192 12  8 12:36 bigdecimal-1.3.5
drwxr-xr-x   7 username  staff  224  2  2 23:27 bigdecimal-1.4.3
drwxr-xr-x   5 username  staff  160  2  2 23:50 bindex-0.5.0
drwxr-xr-x   6 username  staff  192  2  2 23:28 date-2.0.0
drwxr-xr-x   6 username  staff  192 12  8 12:36 etc-1.0.1
drwxr-xr-x   6 username  staff  192  2  2 23:28 io-console-0.4.7
drwxr-xr-x   6 username  staff  192 12  8 12:19 nio4r-2.3.1
drwxr-xr-x   6 username  staff  192  2  2 23:33 nokogiri-1.10.1
drwxr-xr-x   6 username  staff  192 12  8 12:19 nokogiri-1.8.5
drwxr-xr-x   6 username  staff  192 12  8 12:37 openssl-2.1.2
drwxr-xr-x   6 username  staff  192 12  8 12:37 psych-3.0.3
drwxr-xr-x   6 username  staff  192  2  2 23:33 psych-3.1.0
drwxr-xr-x   5 username  staff  160 12  8 16:58 stringio-0.0.2
drwxr-xr-x   5 username  staff  160 12  8 12:19 websocket-driver-0.7.0

権限が自分のユーザー名になっていれば成功です。
再度、rails new  プロジェクト名を実行するとうまくいきます。


Railsの初回作成で悩まされました。

環境構築系のエラーなどは、オンライン学習等ではなかなか勉強できないので
実際に自分で体験してみて、解消するのが勉強の近道ですね。

ただ、オンライン学習サービスのドットインストールではある程度のエラー
(動画の内容に近しい手順で発生したエラー内容等)であれば質問を投げると返してくれるので、
登録しているならそちらを利用してみても良いかもしれません。

これからもRuby系の記事を勉強がてらに書いていきます。

Railsを学べるおすすめプログラミング学習サービス

Udemyの以下の講座がおすすめです。
≫ はじめての Ruby on Rails入門-RubyとRailsを基礎から学びWebアプリケーションをネットに公開しよう

人気記事:おすすめプログラミング学習動画サービス3選

\記事のシェアをお願いします!/