#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 самостоятельно, но для меня вышеприведенного было достаточно ™.