我过去做过很多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池,就像这样:
- 将
ruby
,jruby
,gem
,bundle
和任何其他与ruby相关的可执行文件从我的$HOME/bin
移动到不在我的$PATH
上的备份目录。 - 将
$HOME/.rvm
树重命名为不在我的$PATH
上的东西。 - 重新安装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.