3
votes

I've got two RoR apps, one is using ruby 2.0.0 with gemset called dataentry3 (rvm use 2.0.0@dataentry3) and second app is using ruby 1.9.3@v1.

I tried to deploy those apps in following way:

  1. rvm use ruby-2.0.0@dataentry3
  2. cd dir/app1
  3. gem install passenger
  4. passenger-install-nginx-module
  5. Edit nginx.conf:

    http {
    passenger_root /usr/local/rvm/gems/ruby-2.0.0-p195@dataentry3/gems/passenger-4.0.3;
    
    server {
        listen       80;
        server_name  localhost;
        location / {
            passenger_ruby /usr/local/rvm/wrappers/ruby-2.0.0-p195@dataentry3/ruby;
            root /var/www/adgally/dataentry4/public;
            passenger_enabled on;
        }
    }
    
    }
    
  6. Everything is working fine (http://my-ip).

After those steps I tried to deploy second app on address http://my-ip/v1 (new phusion passenger allows to run multiple ruby versions, see here)

Steps I did:

  1. rvm use ruby-1.9.3@v1
  2. cd dir/app2
  3. gem install passenger
  4. Edit nginx.conf:

    http {
    passenger_root /usr/local/rvm/gems/ruby-2.0.0-p195@dataentry3/gems/passenger-4.0.3;
    
    server {
        listen       80;
        server_name  localhost;
        location / {
            passenger_ruby /usr/local/rvm/wrappers/ruby-2.0.0-p195@dataentry3/ruby;
            root /var/www/adgally/dataentry4/public;
            passenger_enabled on;
        }
    location /v1 {
         passenger_ruby /usr/local/rvm/wrappers/ruby-1.9.3-p429@v1/ruby;
         root /var/www/adgally/v1/public;
         passenger_enabled on;
    }
    }
    
    }
    

After this, second app (http://my-ip/v1) is not working. I'm getting error:

Permission denied - /nonexistent (Errno::EACCES)
  /usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/fileutils.rb:247:in `mkdir'
  /usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/fileutils.rb:247:in `fu_mkdir'
  /usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/fileutils.rb:221:in `block (2 levels) in mkdir_p'
  /usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/fileutils.rb:219:in `reverse_each'
  /usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/fileutils.rb:219:in `block in mkdir_p'
  /usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/fileutils.rb:205:in `each'
  /usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/fileutils.rb:205:in `mkdir_p'
  /usr/local/rvm/gems/ruby-2.0.0-p195@dataentry3/gems/passenger-4.0.3/lib/phusion_passenger/native_support.rb:145:in `mkdir'
  /usr/local/rvm/gems/ruby-2.0.0-p195@dataentry3/gems/passenger-4.0.3/lib/phusion_passenger/native_support.rb:162:in `block in compile'
  /usr/local/rvm/gems/ruby-2.0.0-p195@dataentry3/gems/passenger-4.0.3/lib/phusion_passenger/native_support.rb:160:in `each'
  /usr/local/rvm/gems/ruby-2.0.0-p195@dataentry3/gems/passenger-4.0.3/lib/phusion_passenger/native_support.rb:160:in `each_with_index'
  /usr/local/rvm/gems/ruby-2.0.0-p195@dataentry3/gems/passenger-4.0.3/lib/phusion_passenger/native_support.rb:160:in `compile'
  /usr/local/rvm/gems/ruby-2.0.0-p195@dataentry3/gems/passenger-4.0.3/lib/phusion_passenger/native_support.rb:138:in `compile_and_load'
  /usr/local/rvm/gems/ruby-2.0.0-p195@dataentry3/gems/passenger-4.0.3/lib/phusion_passenger/native_support.rb:37:in `start'
  /usr/local/rvm/gems/ruby-2.0.0-p195@dataentry3/gems/passenger-4.0.3/lib/phusion_passenger/native_support.rb:205:in `<top (required)>'
  /usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
  /usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
  /usr/local/rvm/gems/ruby-2.0.0-p195@dataentry3/gems/passenger-4.0.3/helper-scripts/rack-preloader.rb:48:in `init_passenger'
  /usr/local/rvm/gems/ruby-2.0.0-p195@dataentry3/gems/passenger-4.0.3/helper-scripts/rack-preloader.rb:126:in `<module:App>'
  /usr/local/rvm/gems/ruby-2.0.0-p195@dataentry3/gems/passenger-4.0.3/helper-scripts/rack-preloader.rb:6:in `<module:PhusionPassenger>'
  /usr/local/rvm/gems/ruby-2.0.0-p195@dataentry3/gems/passenger-4.0.3/helper-scripts/rack-preloader.rb:5:in `<main>'

There must be conflict between ruby-2.0.0 and ruby-1.9.3 passenger gems. I don't understand why, because new version of passenger is supporting this. After changing passenger_root directive to /usr/local/rvm/gems/ruby-1.9.3-p429@v1/gems/passenger-4.0.3 second app started working, but first one not (almost same error log).

2

2 Answers

1
votes

You are setting the ruby version system wide with the rvm use...

You need to use the PassengerRuby option in your virtual host, check this link to the passenger docs: http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerDefaultRuby

Also try using a separate virtual host for each app.

0
votes

/nonexistant is the home directory of the 'nobody' user. In other words, Phusion Passenger was trying to run your app as the 'nobody' user, and fails because that user doesn't have a valid home directory.

You probably did not intent your app to be run as the 'nobody' user. To solve this, chown your config.ru to the user you intent to run as. For more information, read about User switching support in Phusion Passenger.