アプリに画像投稿機能を実装しようと、以下をGemfileに記述し
gem 'carrierwave'
gem 'rmagick'
ターミナルで bundle install
すると…
なんかエラーが発生して困った。
$ bundle install
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
Fetching gem metadata from https://rubygems.org/............
Using rake 12.3.2
Using concurrent-ruby 1.1.5
Using i18n 1.6.0
Using minitest 5.11.3
Using thread_safe 0.3.6
Using tzinfo 1.2.5
Using activesupport 5.2.3
Using builder 3.2.3
Using erubi 1.8.0
Using mini_portile2 2.4.0
Fetching nokogiri 1.10.2
Installing nokogiri 1.10.2 with native extensions
Errno::EACCES: Permission denied @ rb_sysopen -
/Users/taco3suisui/rails/portfolio1/vendor/bundle/ruby/2.3.0/gems/nokogiri-1.10.2/LICENSE-DEPENDENCIES.md
An error occurred while installing nokogiri (1.10.2), and Bundler
cannot continue.
Make sure that `gem install nokogiri -v '1.10.2' --source
'https://rubygems.org/'` succeeds before bundling.
Permission denied
云々
直訳すれば「権限が拒否されました〜」云々
Errno::EACCES: Permission denied @ rb_sysopen -
/Users/taco3suisui/rails/portfolio1/vendor/bundle/ruby/2.3.0/gems/nokogiri-1.10.2/LICENSE-DEPENDENCIES.md
色々調べるうちに、
「nokogiri」というgemが自分の権限になっていないのが原因
という事が分かる。
$ ls -la
を入力して権限の所有者(?)を確認↓
total 0
drwxr-xr-x 10 username staff 320 Apr 21 23:55 minitest-5.11.3
drwxr-xr-x 11 root staff 352 Apr 22 00:11 nokogiri-1.10.2
drwxr-xr-x 14 username staff 448 Apr 21 23:55 rake-12.3.2
drwxr-xr-x 16 username staff 512 Apr 21 23:55 thread_safe-0.3.6
drwxr-xr-x 10 username staff 320 Apr 21 23:55 tzinfo-1.2.5
あ!nokogiriの権限だけが root になっている!
これを直してやれば良いんだな!
$ chown -R username /Users/username/.rbenv/versions/2.5.0/lib/ruby/gems/nokogiri-1.10.2
これでも上手くいかない。なぜだか分からんが
sudo を付けてやってみると上手く行った。
※sudo とは、他のユーザー権限でコマンド実行するときに使うらしい
$ sudo chown -R username
/Users/username/.rbenv/versions/2.5.0/lib/ruby/gems/nokogiri-1.10.2
その後「bundle install --path vendor/bundle」
するとエラーもなく成功!
未熟者の私は「権限(permission)」云々がどんな意味を成しているのかすらイマイチ解っていなかったが、このあたりの仕組みも勉強していかないといけないですね。