Не удается установить rails с помощью JRuby

#ruby-on-rails #ruby #rubygems #jruby

#ruby-on-rails #ruby #rubygems #jruby

Вопрос:

Я пытаюсь установить rails с помощью JRuby с помощью следующей команды

jruby -S gem устанавливает rails -версия 3.0.6

Но застрял с ошибкой :

 JRuby limited openssl loaded. http://jruby.org/openssl
gem install jruby-openssl for full support.
System.java:-2:in `arraycopy': java.lang.ArrayIndexOutOfBoundsException
        from DefaultResolver.java:111:in `makeTime'
        from DefaultResolver.java:277:in `create'
        from DefaultResolver.java:317:in `handleScalar'
        from DefaultResolver.java:435:in `orgHandler'
        from DefaultResolver.java:455:in `node_import'
        from org/yecht/ruby/DefaultResolver$s_method_1_0$RUBYINVOKER$node_import
.gen:65535:in `call'
        from CachingCallSite.java:146:in `call'
        from RubyLoadHandler.java:40:in `handle'
        from Parser.java:300:in `addNode'
        from DefaultYAMLParser.java:676:in `yyparse'
        from Parser.java:290:in `yechtparse'
        from Parser.java:284:in `parse'
        from YParser.java:152:in `load'
        from org/yecht/ruby/YParser$s_method_0_1$RUBYINVOKER$load.gen:65535:in `
call'
        from JavaMethod.java:630:in `call'
        from DynamicMethod.java:186:in `call'
        from CachingCallSite.java:309:in `cacheAndCall'
        from CachingCallSite.java:148:in `call'
        from CallOneArgNode.java:57:in `interpret'
        from LocalAsgnNode.java:123:in `interpret'
        from NewlineNode.java:104:in `interpret'
        from InterpretedMethod.java:180:in `call'
        from DefaultMethod.java:174:in `call'
        from CachingCallSite.java:309:in `cacheAndCall'
        from CachingCallSite.java:148:in `call'
        from CallOneArgNode.java:57:in `interpret'
        from LocalAsgnNode.java:123:in `interpret'
        from NewlineNode.java:104:in `interpret'
        from BlockNode.java:71:in `interpret'
        from InterpretedMethod.java:180:in `call'
        from DefaultMethod.java:174:in `call'
        from CachingCallSite.java:309:in `cacheAndCall'
        from CachingCallSite.java:148:in `call'
        from CallOneArgNode.java:57:in `interpret'
  

Любой может помочь мне устранить эту ошибку.

Заранее спасибо.

Комментарии:

1. вы пробовали строку ‘gem install jruby-openssl’, о которой говорится в выводе ошибки?

2. да, я могу установить «jruby -S gem install jruby-openssl», Но после этого, когда я запускаю команду для установки rails, она выдает мне вышеупомянутое исключение.

Ответ №1:

У меня была эта проблема совсем недавно, но это было с rspec . Попробуйте это:
jruby --1.9 -S gem install rails -v 3.0.6

Это указывает jruby использовать интерпретатор ruby 1.9.

Комментарии:

1. У меня это сработало. Вот ссылка на проблему с JRuby: jira.codehaus.org/browse/JRUBY-5581 Похоже, это может быть исправлено в 1.6.2.

Ответ №2:

Эта ошибка была исправлена в JRuby 1.6.2.

Обходной путь для JRuby 1.6.1 в командной строке (Windows):

 set JRUBY_OPTS=--1.9
# in your specific case
gem install rails   

# this is where I got the error (Rails 3 with Bundler)
bundle update
  

Комментарии:

1. Да, я получил ту же ошибку при установке Vagrant в Windows 7 x64 с установленным jruby 1.5.6. Удаление 1.5.6 и установка последней версии (1.6.5) решили проблему.

Ответ №3:

Эта ошибка может возникнуть с некоторыми версиями устанавливаемого вами gem, но не с другими. Это связано с тем, что ошибка YAML связана с date полем в файле YAML, как указано в этом комментарии к ошибке 5581.

Например, версия 1.4.2 bio gem вызвала исключение для меня.

Инструкции о том, как получить метаданные, взяты из Shaving a YAML Yak, за исключением того, что я заменил gunzip и less на gzcat

 gem fetch bio --version 1.4.2
tar xvf bio-1.4.2.gem
gunzip metadata.gz
less metadata | grep date
date: 2011-08-26 00:00:00.000000000 Z

YAML.load("date: 2011-08-26 00:00:00.000000000 Z") # Causes exception
  

тогда как для версии 1.4.1 bio

 gem fetch bio --version 1.4.1
tar xvf bio-1.4.1.gem
gunzip metadata.gz
less metadata | grep date
date: 2010-10-22 00:00:00  09:00

YAML.load("date: 2010-10-22 00:00:00  09:00") # Doesn't cause an exception
  

У меня это sudo jruby -S gem install bio --version 1.4.1 сработало.

Если вам нужна последняя версия, вы можете извлечь gem и изменить его метаданные или создать gem самостоятельно, но для меня вышеприведенного было достаточно ™.