新的 Rails 应用程序尝试在"bundle install"上使用 jruby,当我希望它使用常规红宝石时,有错误吗?



我过去做过很多rails和ruby的工作(使用rvm,有很多不同类型的ruby),但最近根本没有做任何ruby的工作。我只是想做一个新的rails应用程序,以确保我的技能不会生锈,使用以下设置:

使用system ruby:

which ruby:/usr/bin/ruby
Ruby -v: Ruby 1.8.7 (2008-08-11> patchlevel 72) [i586-linux]

rails -v: rails 3.0.7

当我输入:rails new TestApp时,我得到一个新的rails应用程序,带有Gemfile,一切看起来都很好。

TestApp内部,当我运行:

包安装

:

http://pastie.org/2986861

让我沮丧的是:

org/jruby/RubyArray.java:1671:in `each': Detected invalid array contents due to unsynchronized modifications with concurrent users (ConcurrencyError)
from /home/jenny/lib/ruby/gems/1.8/gems/bundler-1.0.13/lib/bundler/spec_set.rb:12:in `each'
from /home/jenny/lib/ruby/gems/1.8/gems/bundler-1.0.13/lib/bundler/installer.rb:49:in `run'
from /home/jenny/lib/ruby/gems/1.8/gems/bundler-1.0.13/lib/bundler/installer.rb:8:in `install'
from /home/jenny/lib/ruby/gems/1.8/gems/bundler-1.0.13/lib/bundler/cli.rb:222:in `install'
from org/jruby/RubyObject.java:1334:in `send'
from /home/jenny/lib/ruby/gems/1.8/gems/bundler-1.0.13/lib/bundler/vendor/thor/task.rb:21:in `run'
from /home/jenny/lib/ruby/gems/1.8/gems/bundler-1.0.13/lib/bundler/vendor/thor/invocation.rb:118:in `invoke_task'
from /home/jenny/lib/ruby/gems/1.8/gems/bundler-1.0.13/lib/bundler/vendor/thor.rb:246:in `dispatch'
from /home/jenny/lib/ruby/gems/1.8/gems/bundler-1.0.13/lib/bundler/vendor/thor/base.rb:389:in `start'
from /home/jenny/lib/ruby/gems/1.8/gems/bundler-1.0.13/bin/bundle:13:in `(root)'
from org/jruby/RubyKernel.java:1066:in `load'

这似乎暗示bundle正在使用jruby(并且在这样做时出错并且未能完成我的bundle安装)。

这里有什么明显的错误吗?我使用的是新rails应用程序中包含的默认gem文件…(网址:http://pastie.org/2986869)

最后一次我做任何轨道工作,一切都很好…但那是很久以前的事了(几个月,也许是将近一年?)我是不是忘了什么?

编辑:

哪个bundle:/home/jenny/bin/bundle/home/jenny/bin/rails

我不相信自己现在在使用RVM,但只是为了确保我确保RVM指向系统ruby(所以RVM或否,它应该使用相同的东西)。

编辑:"rvm list" get me:

rvm列表

rvm红宝石

ruby-1.9.2-p136 [ i386 ]

jruby-1.3.1 [i386-java]

jruby-1.5.6 [i386-java]

ruby-1.9.2-p0 [i386]

ruby-1.9.2-rc1 [i386]

jruby-1.2.0 [i386-java]

jruby-1.6.1 [linux-i386-java]线程"main"异常java.lang.NoClassDefFoundError: org/jruby/Main原因:java.lang.ClassNotFoundException: org.jruby.Main在java.net.URLClassLoader 1.美元运行(URLClassLoader.java: 217)在java.security.AccessController。doPrivileged(本地方法)java.net.URLClassLoader.findClass (URLClassLoader.java: 205)java.lang.ClassLoader.loadClass (ClassLoader.java: 319)sun.misc.Launcher AppClassLoader.loadClass美元(Launcher.java: 294)java.lang.ClassLoader.loadClass (ClassLoader.java: 264)java.lang.ClassLoader.loadClassInternal (ClassLoader.java: 332)找不到主类:org.jruby.Main。程序将退出。

jruby-head []

jruby-1.6.2 [linux-i386-java]

jruby-1.4.0 [i386-java]

看起来也不是那么好…删除jruby head可以解决这个问题,但我仍然有相同的bundle问题。

Edit:删除所有jruby rvms的结果是一样的。看起来它的RVM并没有把事情搞砸。输入哪个jruby会得到"/home/jenny/bin/jruby"。但是…通常,如果我想使用jruby,我必须指定它(jruby rails,例如)....Bundle不应该默认使用它,对吧?

编辑(1/9/12):更新我的捆绑器会得到一个新的(非常相似的)错误消息。特别是"并发错误,由于与并发用户的不同步修改而导致的无效数组内容"与gem "polyglot"。至少没有奇怪的jruby。(我还卸载了rvm中的所有内容并重新安装了所有内容,这似乎有所帮助,并且我将从这里开始使用rvm)。卸载polyglot并重新安装它根本没有帮助。

最后,我卸载了rvm,然后重新安装了它,卸载了我的系统ruby和系统jruby,在rvm中只安装了ruby 1.9.2,一切正常。唷。

好吧,至少我解决了那个问题。现在我可以捆绑销售,但不能生产新车型?我想该问个新问题了。

你的$HOME/bin中的bundle来自哪里?它是一个符号链接到一个文件在你的.rvm目录树的某个地方,或者它是一个脚本?如果它是一个脚本,第一行是什么?也许它被设置为总是在JRuby中运行?

我以前见过这种"错误的Ruby"的事情发生,要么是通过我的$PATH中的某个地方的可执行文件,而不是我想要的Ruby,或者通过RVM只是简单地进入杂草并将gems安装到错误的地方。

如果它是我的机器,我会尝试消除可能干扰我正在运行的ruby的(J) ruby池,就像这样:

  1. ruby, jruby, gem, bundle和任何其他与ruby相关的可执行文件从我的$HOME/bin移动到不在我的$PATH上的备份目录。
  2. $HOME/.rvm树重命名为不在我的$PATH上的东西。
  3. 重新安装RVM或rbenv的副本,并添加我需要的Ruby版本。

将.rvmrc文件添加到rails目录,其内容为:

rvm ruby-1.9.2-p136

then CD ..然后再CD到rails应用中。(我建议升级到1.9.2-p290)

也许升级到最新的捆绑器会有帮助?现在是1.0.21。

您正在使用1.0.13.

相关内容