что эти значения возвращаются из Jruby? (File :: Stat.dev_minor) - PullRequest
0 голосов
/ 13 марта 2012

У меня есть приложение, которое использует jruby, и оно записывает некоторую информацию о файлах в таблицу.например, размер файла и номер старшего и младшего устройства.File::Stat.dev_minor и File::Stat.dev_major

Однако я заметил, что jruby производит очень разные значения, чем собственный пакет ruby ​​1.9.2, например, под ruby;

irb(main):006:0> puts File::stat("/etc/passwd").dev_minor
5      <------- need to find this
=> nil
irb(main):007:0> puts File::stat("/etc/passwd").dev_major
104         <------- need to find this
=> nil

под jruby 1.6.4, это создает ClassNotFoundExceptions, однако он также возвращает число, которое записывает это приложение, и которое мне теперь нужно преобразовать обратно в родной ruby.

# File.stat("/etc/passwd").dev_minor

java.lang.ClassNotFoundException: rubygems.defaults.OperatingSystemService
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Metho

Exception `LoadError' at file:/srv/logstash/logstash-monolithic-1.1.0.jar!/META-INF/jruby.home/lib/ruby/site_ruby/shared/Win32API.rb:2 - Win32API only supported on win32
java.lang.ClassNotFoundException: rubygems.defaults.JrubyNativeService
        at java.net.URLClassLoader$1.run(Unknown Source)

26629      


# File.stat("/etc/passwd").dev_major

java.lang.ClassNotFoundException: rubygems.defaults.OperatingSystemService
        at java.net.URLClassLoader$1.run(Unknown Source)
Exception `LoadError' at file:/srv/logstash/logstash-monolithic-1.1.0.jar!/META-INF/jruby.home/lib/ruby/site_ruby/shared/Win32API.rb:2 - Win32API only supported on win32
java.lang.ClassNotFoundException: rubygems.defaults.JrubyNativeService


0   <------- and this one too...

Я использую jruby 1.6.4 с использованиемКлиент Sun Java Java Hotspot 1.6.0_30, чем из базового Ruby 1.9.2 на fedora.

Есть предложения?

Я хотел бы преобразовать эти числа обратно в обычный рубиновый формат ..

jruby -> File.stat ("/ etc / passwd"). Кажется, что dev_minor соответствует значениям для stat -c %d /etc/passwd = 26629

1 Ответ

1 голос
/ 14 марта 2012

Это потому, что dev_minor и dev_major имеют смысл только для файлов устройства.При использовании функции stat в файлах устройств MRI и JRuby (которые внутренне используют jnr-posix) ведут себя одинаково:

sebastien@greystones:$ rvm use jruby-1.6-head
Using /home/sebastien/.rvm/gems/jruby-1.6-head
sebastien@greystones:$ jruby -e 'File.stat("/dev/tty0").dev_minor'
sebastien@greystones:$ jruby -e 'puts File.stat("/dev/tty0").dev_minor'
5
sebastien@greystones:$ jruby -e 'puts File.stat("/dev/tty0").dev_major'
0

sebastien@greystones:$ rvm use 1.9.3-p0
Using /home/sebastien/.rvm/gems/ruby-1.9.3-p0
sebastien@greystones:$ ruby -e 'puts File.stat("/dev/tty0").dev_minor'
5
sebastien@greystones:$ ruby -e 'puts File.stat("/dev/tty0").dev_major'
0
...