How to fix a bundle install “nio4r error” on Rails

2019-02-13 13:25发布

问题:

The exact error is:

An error occurred while installing nio4r (1.2.1), and bundler cannot continue. Make sure that 'gem install nio4r -v '1.2.1'' succeeds before bundling.

Here is a trace:

Fetching gem metadata from https://rubygems.org/
Fetching version metadata from https://rubygems.org/
Fetching dependency metadata from https://rubygems.org/
Using rake 12.0.0
Using concurrent-ruby 1.0.5
Using i18n 0.8.1
Using minitest 5.10.1
Using thread_safe 0.3.6
Using builder 3.2.3
Using erubis 2.7.0
Using mini_portile2 2.1.0
Using rack 2.0.1
Installing nio4r 1.2.1 with native extensions

Errno::EACCES: Permission denied @ rb_sysopen - /Users/lukeplourde/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/nio4r-1.2.1/.gitignore
Using websocket-extensions 0.1.2
Using mime-types-data 3.2016.0521
Using arel 7.1.4
Using byebug 9.0.6
Using coffee-script-source 1.12.2
Using execjs 2.7.0
Using method_source 0.8.2
Using thor 0.19.4
Using debug_inspector 0.0.2
Using ffi 1.9.17
Using multi_json 1.12.1
Using rb-fsevent 0.9.8
Using puma 3.7.0
Using bundler 1.12.5
Using sass 3.4.23
Using tilt 2.0.6
Using sqlite3 1.3.13
Using turbolinks-source 5.0.0
Using tzinfo 1.2.2
Using nokogiri 1.7.0.1
Using rack-test 0.6.3
Using sprockets 3.7.1
An error occurred while installing nio4r (1.2.1), and Bundler cannot continue.
Make sure that `gem install nio4r -v '1.2.1'` succeeds before bundling.

回答1:

I resolved the issue by running the following command.

bundle config build.nio4r --with-cflags="-std=c99"
bundle


回答2:

I was able to fix the problem with:

brew update 

and

bundle update


回答3:

I was with the same error just now.. In my case, I had installed the ruby through the package: https://www.brightbox.com/blog/2017/01/13/ruby-2-4-ubuntu-packages/

But, I had not installed the ruby-dev package.

In my case: sudo apt-get install ruby2.4-dev worked for me.

After installation I was able to compile the gem: nio4r

I think you have to install some package ruby-dev => sudo apt-get install ruby-dev



回答4:

This path:

/Users/lukeplourde/.rbenv/...

shows you're using rbenv to manage your Ruby.

You should never get permission errors in that case. The fact you are getting a permission error strongly suggests that at some point you installed something, probably nio4r, into that rbenv-managed Ruby using sudo.

When you use sudo, you temporarily elevate your privileges to the system's root user's privileges, and all files saved will have that user's read/write settings and ownership. That's definitely not what you want.

rbenv's documentation specifically says to not use sudo:

You don't need sudo to install gems. Typically, the Ruby versions will be installed and writeable by your user. No extra privileges are required to install gems.

To fix the problem simply run:

sudo chown -R lukeplourde ~/.rbenv

and chown will walk through all directories in the ~/.rbenv directory and change the ownership back to you for all child files and directories.

Knowing when to use sudo takes experience and knowledge of the Ruby environment, your current settings for it, and what it is you intend to happen. In general though, if your rbenv is set to use a Ruby you installed you do not want to use any sudo command when using gem. If you are on Mac OS and you are using sudo and rbenv and a Ruby you installed then think multiple times before pressing Return because it's likely not what you want to do.

And, the above warnings about using sudo apply if you're using a RVM or Homebrew managed Ruby also. sudo is usually not your desired first approach. The documentation on their official sites is your best source of information on what to do.


Did you reset the ownership of the files?

The ownership did not change no.

Most of the time, two things are at the root of permissions problems:

  • ownership
  • access flags

chown changes ownership of a file or directory and optionally allows us to change the owner's group. If you are not the owner according to the system, and/or not in the group, then your chances of being able to access it went down.

chmod changes the access privileges of a file or directory for the owner, their group, and/or for everyone else on the machine.

The .gitignore file in question should be owned by you, and have permissions of -rw-r--r--. If those aren't, you need to set them so they are. Study the chmod and chown commands using man chmod and man chown at the command-line and adjust the file/directory permissions appropriately and you should be able to fix the problem.