JRuby 无法使用我安装的适配器
Posted
技术标签:
【中文标题】JRuby 无法使用我安装的适配器【英文标题】:JRuby cannot use the adapter I installed 【发布时间】:2011-06-19 14:20:07 【问题描述】:我使用 rvm 安装 jruby (1.5.6) 并安装了我所有的 gem。我可以运行简单的 Rails 任务,例如
脚本/运行器'放置 1'
并且输出很好。一旦我点击数据库,我就会得到一个错误。我已经卸载/重新安装了 activerecord-jdbcmysql-adapter gem、Jruby、rvm、JAVA_JDK。我已经正确设置了 JRUBY_HOME 和 JAVA_HOME,但似乎没有任何效果。
有什么想法吗?
据我所知,我安装了 Java JDK 1.6.0 和 1.5.0。 IT 当前指向 1.6.0。但由于所有其他 gem 安装正确,我假设这完全是另一回事。
我在 EC2 上使用 Ubuntu 10.04(64 位)
带有 RVM 的 Ruby 1.9.2 效果很好!
nohup:忽略输入
/opt/jruby/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/connection_adapters/abstract/connection_specification.rb:76:in establish_connection': Please install the jdbcmysql adapter:
gem install activerecord-jdbcmysql-adapter(no such file to load -- active_record/connection_adapters/jdbcmysql_adapter) (RuntimeError)
from /opt/jruby/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/connection_adapters/abstract/connection_specification.rb:60:in
establish_connection '
来自 /opt/jruby/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/connection_adapters/abstract/connection_specification.rb:55:in establish_connection'
from /opt/jruby/lib/ruby/gems/1.8/gems/rails-2.3.8/lib/initializer.rb:438:in
initialize_database'
来自 /opt/jruby/lib/ruby/gems/1.8/gems/rails-2.3.8/lib/initializer.rb:141:in process'
from /opt/jruby/lib/ruby/gems/1.8/gems/rails-2.3.8/lib/initializer.rb:113:in
run'
来自/home/tesmar/rails/statsheet/config/environment.rb:19
来自/home/tesmar/rails/statsheet/config/environment.rb:39:in require'
from /opt/jruby/lib/ruby/gems/1.8/gems/rails-2.3.8/lib/commands/runner.rb:39
from /opt/jruby/lib/ruby/gems/1.8/gems/rails-2.3.8/lib/commands/runner.rb:3:in
require'
来自脚本/运行器:3
【问题讨论】:
我应该补充一点,database.yml 指向正确的适配器。 我还应该补充一点,我不明白这里的投票是如何进行的。例如:我投票反对 Dex 对 -1 的回答,同时支持 Mark 的回答。现在 dex 显示 0,Mark 显示适当的 1。我的投票不算数吗? 【参考方案1】:正如错误消息所说,您需要安装activerecord-jdbcmysql-adapter
gem。
您的执行环境可能与您的 rvm 环境不同。我已经看到这种情况发生在诸如 NetBeans 之类的 IDE 中。
【讨论】:
我做到了。使用JRUBY。它被列为已安装。 jruby -S 宝石列表和宝石列表。由于 rvm 符号链接 gem 到 jruby 版本,它最终得到相同的结果。 您使用的是像 NetBeans 这样的 IDE 吗?您的执行环境可能与您的 rvm 环境不同。 您知道,在找到问题的解决方案之前投票否决答案是一种糟糕的形式。 嗨,马克,感谢您的建议;但是他的建议与我的问题无关。我的 database.yml 没有问题,而是 rails 找不到我已经安装的 gem。【参考方案2】:如果您在 jRuby 和 MRI 之间来回切换,您也可以在 Gemfile 中添加类似的内容:
if defined?(JRUBY_VERSION)
gem 'jdbc-mysql'
gem 'activerecord-jdbc-adapter'
gem 'activerecord-jdbcmysql-adapter'
gem 'warbler'
else
gem 'mysql'
gem 'mongrel'
end
然后,在你的 database.yml 中添加如下内容:
development:
adapter: <%= defined?(JRUBY_VERSION) ? 'jdbcmysql' : 'mysql' %>
【讨论】:
谢谢你,Dex,但这不是我要找的。span> 如果您先使用 RVM 1.9.2,然后尝试使用 jRuby,您还需要删除 Gemfile.lock 并重新运行bundle install
。此外,如果您使用的是 rvm,我必须在运行 bundler 之前创建一个单独的 gemset。
运行命令时,最好也使用jruby -S
运行它们。
单独的 gemset 是什么意思?我首先使用了 JRuby,然后是 1.9.2。当我正常安装 JRUby(没有 RVM)并为我的所有命令使用 jruby -S 时,也会发生这种情况。这真的让我很困惑。
感谢 Dex 的建议。确实有单独的gemset,但我发现的问题如下。【参考方案3】:
我想通了。在将所有 rb 文件手动复制到活动记录 gem(来自 activerecord-jdbcmysql 和 activerecord-jdbc gems 的 rb 文件)之后,我必须下载 JAR 文件。然后我将 JAR 文件放在 /opt/jruby/lib 目录中,它就可以工作了!哇哦!
【讨论】:
我仍然认为您的环境有些奇怪。 gem 安装应该在不复制 .rb 文件的情况下工作。 这是可能的,但我完全按照 RVM 的说明进行操作。如有必要(或者如果您认为这会有所帮助),我可以提供 ENV 转储,但大多数其他东西都运行良好(例如 ruby 1.9 和系统 ruby。) 您提到我必须下载 JAR 文件?您能否帮助了解哪个 JAR 文件以及您为解决此问题而执行的确切步骤?【参考方案4】:你的 gemfile 是什么样子的?
我的看起来像这样并且可以工作:
source 'http://rubygems.org'
gem 'rails', '3.0.4'
platforms :ruby do
gem 'mysql2'
end
platforms :jruby do
gem 'activerecord-jdbc-adapter'
gem 'jdbc-mysql', :require => false
end
【讨论】:
不知道,它只是复制粘贴的。但如果我猜的话,我猜 jdbc-mysql-gem 没有提供“需要 jdbc-mysql”以上是关于JRuby 无法使用我安装的适配器的主要内容,如果未能解决你的问题,请参考以下文章
无法创建仅限主机的适配器 - windows 10、docker、virtualbox
无法在 Eclipse Luna 上安装 Jboss 服务器
MAC用parallels desktop6装win7出现问题无法加载parallels驱动器,物理网络适配器无法连接虚拟网络适配器