Ошибка при запуске rails как root - PullRequest
2 голосов
/ 30 марта 2011

Мое приложение rails хорошо работает под моим пользователем:

$ rails server
=> Booting WEBrick
=> Rails 3.0.5 application starting in development on htttp://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2011-03-30 01:56:29] INFO  WEBrick 1.3.1
[2011-03-30 01:56:29] INFO  ruby 1.9.2 (2011-02-18) [x86_64-darwin10.7.0]
[2011-03-30 01:56:29] INFO  WEBrick::HTTPServer#start: pid=3899 port=3000

Но мне нужно запустить его под портом 80, так что запуск его как sudo дает мне:

$ sudo rails server -p 80
/Users/jamez/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems.rb:900:in `report_activate_error': Could not find RubyGem rails (>= 0) (Gem::LoadError)
    from /Users/jamez/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems.rb:248:in `activate'
    from /Users/jamez/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems.rb:1276:in `gem'
    from /Users/jamez/.rvm/gems/ruby-1.9.2-p180/bin/rails:18:in `<main>'

Больше информации:

$ ruby -v
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.7.0]

$ sudo ruby -v
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.7.0]

$ rails -v
Rails 3.0.5

$ sudo rails -v
/Users/jamez/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems.rb:900:in `report_activate_error': Could not find RubyGem rails (>= 0) (Gem::LoadError)
    from /Users/jamez/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems.rb:248:in `activate'
    from /Users/jamez/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems.rb:1276:in `gem'
    from /Users/jamez/.rvm/gems/ruby-1.9.2-p180/bin/rails:18:in `<main>'

$ gem list --local rails

*** LOCAL GEMS ***

rails (3.0.5)

$ sudo gem list --local rails

*** LOCAL GEMS ***

rails (3.0.5)

$ gem environment
RubyGems Environment:
  - RUBYGEMS VERSION: 1.6.2
  - RUBY VERSION: 1.9.2 (2011-02-18 patchlevel 180) [x86_64-darwin10.7.0]
  - INSTALLATION DIRECTORY: /Users/jamez/.rvm/gems/ruby-1.9.2-p180
  - RUBY EXECUTABLE: /Users/jamez/.rvm/rubies/ruby-1.9.2-p180/bin/ruby
  - EXECUTABLE DIRECTORY: /Users/jamez/.rvm/gems/ruby-1.9.2-p180/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-darwin-10
  - GEM PATHS:
     - /Users/jamez/.rvm/gems/ruby-1.9.2-p180
     - /Users/jamez/.rvm/gems/ruby-1.9.2-p180@global
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://rubygems.org/

$ sudo gem environment
RubyGems Environment:
  - RUBYGEMS VERSION: 1.6.2
  - RUBY VERSION: 1.9.2 (2011-02-18 patchlevel 180) [x86_64-darwin10.7.0]
  - INSTALLATION DIRECTORY: /Users/jamez/.rvm/gems/ruby-1.9.2-p180
  - RUBY EXECUTABLE: /Users/jamez/.rvm/rubies/ruby-1.9.2-p180/bin/ruby
  - EXECUTABLE DIRECTORY: /Users/jamez/.rvm/gems/ruby-1.9.2-p180/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-darwin-10
  - GEM PATHS:
     - /Users/jamez/.rvm/gems/ruby-1.9.2-p180
     - /Users/jamez/.rvm/gems/ruby-1.9.2-p180@global
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://rubygems.org/

Есть идеи о том, что происходит?Как я могу заставить его работать с и без sudo?

Ответы [ 2 ]

7 голосов
/ 30 марта 2011

RVM не позволяет sudo видеть бинарный файл Rails.

Чтобы обойти это, используйте rvmsudo:

> rails -v
Rails 2.3.11

> sudo rails -v
/Users/dan/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems.rb:779:in `report_activate_error': Could not find RubyGem rails (>= 0) (Gem::LoadError)
        from /Users/dan/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems.rb:214:in `activate'
        from /Users/dan/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems.rb:1082:in `gem'
        from /Users/dan/.rvm/gems/ree-1.8.7-2010.02@crm/bin/rails:18

> rvmsudo rails -v
Rails 2.3.11
2 голосов
/ 30 марта 2011

Вы используете Rails 3, который использует Bundler, который устанавливает гемы для каждого пользователя, поэтому прежде чем вы сможете запускать приложение от имени данного пользователя, вы должны сначала запустить bundle install, войдя в систему как этот пользователь. Я думаю, что это поможет вам.

Кстати, я предполагаю, что вы знаете, что запускать что-либо от имени пользователя root рискованно. Возможно, вы захотите настроить Apache и Passenger (или что-то в этом роде) для обслуживания вашего Rails-приложения через порт 80.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...