Webrick wirft LoadError für existierende Datei

Auf dem Server laufen:
OS - Ubuntu 12.04
RVM - 1.22.3 (stable)
Ruby - 2.0.0p247
Rails - 3.2.13
Gem - 2.3.2
Bundler - 1.3.5
Redmine - 2.3.2


Ich habe wie hier beschrieben dieses Kommando abgesetzt
Code:
sudo ruby script/rails server webrick -e production
um zu überprüfen, ob meine Redmineinstallation funktionstüchtig ist. Dabei ist diese Fehlermeldung auf mich geworfen worden:
Code:
/usr/share/redmine-2.3.2/config/boot.rb:1:in `require': no such file to load -- rubygems (LoadError)
from /usr/share/redmine-2.3.2/config/boot.rb:1
from script/rails:5:in `require'
from script/rails:5
Ich bin die entsprechenden Verzeichnisse durchgegangen und habe festgestellt, das die Datei "boot.rb" an genau dem angegebenen Pfad vorhanden ist und dementsprechend ja eigentlich geladen werden kann. Weiß da jemand mehr zu?
 
Zuletzt bearbeitet:
Code:
from /usr/share/redmine-2.3.2/config/boot.rb:1

Die Meldung würde ich jetzt erst mal so interpretieren, dass in Zeile 1 der /usr/share/redmine-2.3.2/config/boot.rb eine Datei inkludiert wird, die nicht existiert. Also auch mal schauen ob das der Fall ist. Ansonsten natürlich auch mal sicherstellen, dass der User, mit dem du den Aufruf machst, auch auf die Datei zugreifen kann. Einfach mal mit 'cat' den Inhalt ausgeben lassen.
 
Da bin ich Dussel gar nicht drauf gekommen.

cat Output:
Code:
require 'rubygems'

# Set up gems listed in the Gemfile.
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)

require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])

Dementsprechend fehlt offenbar die Datei "rubygems".

which -a ruby:
Code:
/home/user/.rvm/rubies/ruby-2.0.0-p247/bin/ruby
/home/user/.rvm/bin/ruby
/usr/bin/ruby

Ich habe nur keinen Plan, welches jetzt das erwünschte Verzeichnis ist und wie ich den Link entsprechend setzen kann.
 
Was gibt dir denn eine Suche nach rubygems aus?

Code:
find / -name 'rubygems*' -print

Und wenn dort was gefunden wird... Hast du die Umgebungsvariable RUBYLIB so gesetzt, dass das Verzeichnis, das die rubygems-Datei enthält, darin enthalten ist?

Code:
echo $RUBYLIB

Alternativ: Sorge dafür, dass nur eine Ruby-Version auf dem System ist, damit die sich nicht in die Quere kommen.
 
find rubygems (ich bin ein klein wenig erschlagen):
Code:
/home/user/.gem/specs/rubygems.org%443
/home/user/.gem/specs/rubygems.org%443/quick/Marshal.4.8/rubygems-bundler-1.2.2.gemspec
/home/user/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/site_ruby/2.0.0/rubygems.rb
/home/user/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/site_ruby/2.0.0/rubygems
/home/user/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/rdoc/rubygems_hook.rb
/home/user/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/rubygems.rb
/home/user/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/rubygems
/home/user/.rvm/src/rvm/patches/jruby/rubygems_etc.patch
/home/user/.rvm/src/rvm/help/rubygems.md
/home/user/.rvm/src/rvm/scripts/rubygems
/home/user/.rvm/gems/ruby-2.0.0-p247@global/doc/rubygems-bundler-1.2.2
/home/user/.rvm/gems/ruby-2.0.0-p247@global/doc/bundler-1.3.5/ri/Bundler/rubygems-c.ri
/home/user/.rvm/gems/ruby-2.0.0-p247@global/doc/bundler-1.3.5/ri/Bundler/Definition/rubygems_index-i.ri
/home/user/.rvm/gems/ruby-2.0.0-p247@global/doc/bundler-1.3.5/ri/Bundler/Definition/rubygems_remotes-i.ri
/home/user/.rvm/gems/ruby-2.0.0-p247@global/bin/rubygems-bundler-uninstaller
/home/user/.rvm/gems/ruby-2.0.0-p247@global/cache/rubygems-bundler-1.2.2.gem
/home/user/.rvm/gems/ruby-2.0.0-p247@global/gems/rubygems-bundler-1.2.2
/home/user/.rvm/gems/ruby-2.0.0-p247@global/gems/rubygems-bundler-1.2.2/lib/rubygems_plugin.rb
/home/user/.rvm/gems/ruby-2.0.0-p247@global/gems/rubygems-bundler-1.2.2/lib/rubygems-bundler
/home/user/.rvm/gems/ruby-2.0.0-p247@global/gems/rubygems-bundler-1.2.2/lib/rubygems-bundler/rubygems_bundler_installer.rb
/home/user/.rvm/gems/ruby-2.0.0-p247@global/gems/rubygems-bundler-1.2.2/test/dtf/rubygems_comment_test.sh
/home/user/.rvm/gems/ruby-2.0.0-p247@global/gems/rubygems-bundler-1.2.2/bin/rubygems-bundler-uninstaller
/home/user/.rvm/gems/ruby-2.0.0-p247@global/gems/rubygems-bundler-1.2.2/rubygems-bundler.gemspec
/home/user/.rvm/gems/ruby-2.0.0-p247@global/gems/bundler-1.3.5/lib/bundler/rubygems_ext.rb
/home/user/.rvm/gems/ruby-2.0.0-p247@global/gems/bundler-1.3.5/lib/bundler/source/rubygems.rb
/home/user/.rvm/gems/ruby-2.0.0-p247@global/gems/bundler-1.3.5/lib/bundler/rubygems_integration.rb
/home/user/.rvm/gems/ruby-2.0.0-p247@global/gems/bundler-1.3.5/spec/support/rubygems_ext.rb
/home/user/.rvm/gems/ruby-2.0.0-p247@global/gems/bundler-1.3.5/spec/support/rubygems_hax
/home/user/.rvm/gems/ruby-2.0.0-p247@global/specifications/rubygems-bundler-1.2.2.gemspec
/home/user/.rvm/gems/ruby-2.0.0-p247/doc/bundler-1.3.5/ri/Bundler/rubygems-c.ri
/home/user/.rvm/gems/ruby-2.0.0-p247/doc/bundler-1.3.5/ri/Bundler/Definition/rubygems_index-i.ri
/home/user/.rvm/gems/ruby-2.0.0-p247/doc/bundler-1.3.5/ri/Bundler/Definition/rubygems_remote-i.ri
/home/user/.rvm/gems/ruby-2.0.0-p247/doc/bundler-1.3.5/lib/bundler/rubygems_ext.rb
/home/user/.rvm/gems/ruby-2.0.0-p247/doc/bundler-1.3.5/lib/bundler/source/rubygems.rb
/home/user/.rvm/gems/ruby-2.0.0-p247/doc/bundler-1.3.5/lib/bundler/rubygems_integration.rb
/home/user/.rvm/gems/ruby-2.0.0-p247/doc/bundler-1.3.5/spec/support/rubygems_ext.rb
/home/user/.rvm/gems/ruby-2.0.0-p247/doc/bundler-1.3.5/spec/support/rubygems_hax
/home/user/.rvm/scripts/rubygems
/usr/local/rvm/patches/jruby/rubygems_etc.patch
/usr/local/rvm/help/rubygems.md
/usr/local/rvm/src/rvm/patches/jruby/rubygems_etc.patch
/usr/local/rvm/src/rvm/help/rubygems.md
/usr/local/rvm/src/rvm/scripts/rubygems
/usr/local/rvm/scripts/rubygems

$RUBYLIB scheint leer zu sein, da ein Echo nur eine Newline ausgibt.
 
Lass einfach mal den Stern bei der Suche weg, dann wird's etwas weniger.

However... Da du mehrere Ruby-Versionen installiert hast, solltest du deinem Ruby mitteilen wo es seine Libs finden kann. Das ist im Normalfall der Ordner, in dem sich die rubygems und rubygems.rb befinden für deine Ruby-Version befinden. Also solltest du diese Umgebungsvariable setzen.
 
Habe jetzt effektiv
Code:
/home/user/.rvm/rubie/ruby-2.0.0-p247/)lib/ruby/site_ruby/2.0.0/
und
Code:
/home/user/.rvm/rubie/ruby-2.0.0-p247/)lib/ruby/2.0.0/
zur Auswahl, aber $RUBYLIB will sich nicht mit
Code:
$ $RUBYLIB="$path"
setzen lassen. Stattdessen gibt Bash eine Fehlermeldung aus, dass der Pfad nicht gefunden worden sei.
 
Zuletzt bearbeitet:
Vielleicht doch erst mal den Umgang mit der Shell lernen? ;)

Code:
export RUBYLIB=/home/user/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/site_ruby/2.0.0/
 
Dann schau mal, ob die Variable im Skript auch verfügbar ist. Einfach mal folgende Zeile über dem Require einfügen:

Code:
puts ENV['RUBYLIB']

Ich bin aber auch nicht wirklich Ruby-Experte. Alternativ würde ich einfach mal das Require auf einen absoluten Pfad erweitern. Man macht also aus "require 'rubygems'" ein

Code:
require '/home/user/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/site_ruby/2.0.0/rubygems'
 
Was gibt dir denn 'ls -lha /home/user/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/site_ruby/2.0.0/rubygems' aus? Kann der User, der das Skript ausführt, die Datei lesen?
 
Gut, und was passiert nun, wenn du versuchst die Datei explizit mit 'ls' anzusprechen?

Code:
ls -lha /home/user/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/site_ruby/2.0.0/rubygems

Edit: Und ist die Fehlermeldung, die du vom Skript bekommst, wenn darin die Require-Direktive den kompletten Pfad hat, wirklich haargenau die gleiche?
 
Notes on Linux/Unix installation

Be sure to disable security hardenning tools during the installation process if you run into bizarre permission problems. These problems are mostly silent and can be caused by tools like extended ACLs, SELinux, or AppArmor. There tools are mostly used in big companies with a strict security policy, default Linux/Unix distributions settings shouldn't be a problem.

Daran hat es wahrscheinlich gelegen.
 
Zurück
Oben