Shiva Krishna Bavandla
Shiva Krishna Bavandla

Reputation: 26728

Building native extensions error in installing ruby gems

I installed a ruby version as below

$ rvm install ruby-1.9.3-p448-dev

and when i checked version as below

$ ruby -v

ruby 1.9.3p448 (2013-06-27 revision 41675) [i686-linux]

But when i tried to install travis like below

$ gem install travis

Building native extensions.  This could take a while...
ERROR:  Error installing travis:
    ERROR: Failed to build gem native extension.

    /home/user/.rvm/rubies/ruby-1.9.3-p448/bin/ruby extconf.rb
/home/user/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/fileutils.rb:1371:in `initialize': Permission denied - /home/user/.travis/travis.sh (Errno::EACCES)
    from /home/user/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/fileutils.rb:1371:in `open'
    from /home/user/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/fileutils.rb:1371:in `block in copy_file'
    from /home/user/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/fileutils.rb:1370:in `open'
    from /home/user/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/fileutils.rb:1370:in `copy_file'
    from /home/user/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/fileutils.rb:477:in `copy_file'
    from /home/user/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/fileutils.rb:396:in `block in cp'
    from /home/user/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/fileutils.rb:1515:in `block in fu_each_src_dest'
    from /home/user/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/fileutils.rb:1529:in `fu_each_src_dest0'
    from /home/user/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/fileutils.rb:1513:in `fu_each_src_dest'
    from /home/user/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/fileutils.rb:395:in `cp'
    from extconf.rb:5:in `<main>'


Gem files will remain installed in /home/user/.rvm/gems/ruby-1.9.3-p448/gems/travis-1.5.2 for inspection.
Results logged to /home/user/.rvm/gems/ruby-1.9.3-p448/gems/travis-1.5.2/completion/gem_make.out

So how to avoid the above native extensions error and install the travis succesfully using gem

Edit

When i tried the command by including sudo as below

sudo gem install travis

I am getting the below message as success

Building native extensions.  This could take a while...
Successfully installed travis-1.5.2
1 gem installed
Installing ri documentation for travis-1.5.2...
Installing RDoc documentation for travis-1.5.2...

And now what all i am trying to do is to set up environ variables on travis and hence i tried the following command

$ travis encrypt -r travis_uname/app_name EMAIL_HOST_KEY=key_value

and getting the below wierd error

/usr/lib/ruby/vendor_ruby/1.8/rubygems/dependency.rb:247:in `to_specs': Could not find travis (>= 0) amongst [addressable-2.3.5, backports-3.3.3, bundler-1.3.5, bundler-unload-1.0.1, coderay-1.0.9, ethon-0.6.0, faraday-0.8.8, faraday_middleware-0.9.0, ffi-1.9.0, gh-0.11.3, highline-1.6.19, launchy-2.3.0, method_source-0.8.2, mime-types-1.24, multi_json-1.7.9, multipart-post-1.2.0, net-http-persistent-2.9, net-http-pipeline-1.0.1, netrc-0.7.7, pry-0.9.12.2, pusher-client-0.3.1, rake-10.1.0, ruby-hmac-0.4.0, rubygems-bundler-1.2.2, rubygems-update-2.0.7, rvm-1.11.3.8, slop-3.4.6, typhoeus-0.6.4, websocket-1.0.7, websocket-native-1.0.0] (Gem::LoadError)
    from /usr/lib/ruby/vendor_ruby/1.8/rubygems/dependency.rb:256:in `to_spec'
    from /usr/lib/ruby/vendor_ruby/1.8/rubygems.rb:1208:in `gem'
    from /usr/local/bin/travis:18

So finally how to avoid above error and make the above travis command work successfully ?

Upvotes: 2

Views: 6349

Answers (3)

RobLoach
RobLoach

Reputation: 2206

Installing the -dev packages fixed it for me... sudo apt-get install ruby-dev

Upvotes: 3

Paola Cerioli
Paola Cerioli

Reputation: 741

It happens sometimes when you install some gems with sudo and other not. Ideally you should never sudo for the gem install. So if you have several gems owned by root and you want to remove the ruby installation and the related gems, run this command:

sudo rvm remove ruby-2.0.0-p353 --gems

rvm remove is the preferred way of removing rubies from rvm. By default, not only will it remove the ruby and it's source files, it will also get rid of aliases, wrappers, environments and any associated binaries - in other words, it cleans up most of the install.

The --gems flag will get rid of all associated gemsets.

The you should reinstall your ruby version with: rvm install ruby-2.0.0-p353 and bundle install again.

Upvotes: 0

Patrick Oscity
Patrick Oscity

Reputation: 54714

First of all, set the Ruby version you are using as a default

rvm use --default ruby-1.9.3-p448-dev

and uninstall the gem previously installed with sudo

sudo gem uninstall travis

this makes sure that all your commands are using the same Ruby version and your machine is clean again. Now to your installation problem. This error

Permission denied - /home/user/.travis/travis.sh (Errno::EACCES)

shows you, that the installer tried to access /home/user/.travis but wasn't able to do so due to a lack of user permissions. This means you need to make sure that the folder belongs to you and is writeable

chown -R `whoami` ~/.travis
chmod -R u+wx ~/.travis

Now go ahead and try to re-install:

gem install travis

and everything should be fine.

Upvotes: 4

Related Questions