エラーの内容
Railsの新しいバージョンをインストールしたいときなど、バージョンを指定してインストールする以下のコマンドがあります。
$ gem install -v <バージョン> rails
ですが、実行したときに以下のようにPermission deniedが表示され、インストールに失敗することがあります。
ERROR: While executing gem ... (Errno::EACCES)
Permission denied @ rb_sysopen - /Users/<ユーザー名>/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/rails-6.1.3.1/README.md
/Users/<ユーザー名>/.rbenv/versions/
配下へのアクセスが否認されている状態です。
実例
$ gem install -v 6.1.3.1 rails
ERROR: While executing gem ... (Errno::EACCES)
Permission denied @ rb_sysopen - /Users/<ユーザー名>/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/rails-6.1.3.1/README.md
ここでは、このエラーの原因と対処法についてまとめています。
エラーの原因
エラーの原因は、アクセスしたいディレクトリやファイルに対してアクセス権限が設定されているためです。
アクセス権限が付いてしまう最も多い原因は、gem install
を実施するときに、管理者権限でコマンドを実行するsudo
をつけて実行したことです。
これにより、インストールしたファイルに権限が付き、自分自身のアクセス権限がなくなります。
sudo有り無しのコマンドの違いは?
記事の中には以下のように「sudo」をつけたコマンドが紹介されていることもあります。
sudo gem install ~
これはAWSや会社のサーバーなど一部の権限が管理されている状態では「sudo」をつけないと、処理が実行されないことがあるためです。
自分のPCなど、特に権限を設定する必要がない場合は「sudo」は必須です。
なお「sudo」とは、管理者を表す「superuser」と実行する「do」を足した「superuser do」を省略した表記です。
エラーの対処法
自分自身のアクセス権限がなくなってしまっているので、自分自身に権限を付与します。
$ sudo chown -R <ユーザー名>:staff /Users/<ユーザー名>/.rbenv
Password:
Passwordには、PCのパスワードを打ち込みます。何も見えませんが、打ち込まれています。入力が終わったらEnterをクリックします。
なお、上記はchrownで指定したユーザーに、指定したディレクトリやファイルへのアクセス権限を与えるコマンドです。
「-R」オプションをつけることで、指定したディレクトリ配下へのアクセス権限が付与されます(「再帰的にアクセス権限の付与を行います)。
コードの概要
sudo
管理者権限でコマンドを実行するchown [オプション] ユーザー[:グループ] ファイル
- 指定したファイルへのユーザー(グループ)の権限を変更する
- chwon = change owner
-R
再起的に変更(配下ディレクトリすべて)
gem installを再度実行
権限の変更ができたら、再度以下のコマンドを実行します。
$ gem install -v <バージョン> rails
実例
$ gem install -v 6.0.3.6 rails
Fetching tzinfo-1.2.9.gem
(省略)
Done installing documentation for thread_safe, tzinfo, activesupport, actionview, actionpack, activemodel, activerecord, activejob, actionmailer, actioncable, activestorage, actionmailbox, actiontext, railties, rails after 11 seconds
15 gems installed
エラーが表示されることなくインストールできました。
gem list rails
でインストールされているか確認します。
$ gem list rails
*** LOCAL GEMS ***
rails (6.1.3.1, 6.0.3.6)
rails-dom-testing (2.0.3)
rails-html-sanitizer (1.3.0)
sprockets-rails (3.2.2)
指定したバージョンがインストールできていることがわかります。
Railsのバージョンを指定してアプリケーションを新規作成する
バージョンを指定したRailsで新たなアプリケーションを起動するときは以下のようにします。
$ rails _<バージョン>_ new <アプリ名>
実例
$ rails _6.0.3.6_ new rails-js-test
create
create README.md
(省略)
└─ ws@6.2.1
✨ Done in 10.79s.
Webpacker successfully installed 🎉 🍰