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:inestablish_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:ininitialize_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:inrun' 来自/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:inrequire' 来自脚本/运行器: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 无法使用我安装的适配器的主要内容,如果未能解决你的问题,请参考以下文章

tapwindowsadapter新建网卡无法使用

如何启动以使用 jruby

无法创建仅限主机的适配器 - windows 10、docker、virtualbox

无法在 Eclipse Luna 上安装 Jboss 服务器

MAC用parallels desktop6装win7出现问题无法加载parallels驱动器,物理网络适配器无法连接虚拟网络适配器

server 2016 无法连接wifi,怎么回事