我正在研究JRuby on Rails应用 JRuby-1.6.7 和 Rails 3.2.2
我有 mysql 数据库。我正在尝试使用数据库适配器。
我使用了 mysql2 和 jdbcmysql 数据库适配器。两者都有效。
但是如果我在一段时间内没有访问应用程序,那么当我访问它时,它会产生如下错误
undefined method `explain' for #<ActiveRecord::ConnectionAdapters::MySQLAdapter:0x1139ba37>
我应该选择哪种数据库适配器?部署后我的应用程序能正常工作吗?
答案 0 :(得分:4)
之前我遇到了同样的错误,但经过一番努力后,我在我的gem文件中定义了适配器,如下所示,直到今天工作正常:
if defined?(JRUBY_VERSION)
gem 'activerecord-jdbc-adapter', '=1.1.3'
gem 'jdbc-mysql', :require=>false
gem 'activerecord-jdbcmysql-adapter', '=1.1.3'
else
gem 'mysql2'
end
希望有所帮助。
答案 1 :(得分:0)
我尝试了@Vik降级activerecord-jdbc的解决方案,但它对我不起作用 - 导致更多问题。
我在activerecord-jdbc github问题列表中找到了这个:
https://github.com/jruby/activerecord-jdbc-adapter/issues/159
基本上它是猴子修补新的解释方法什么都不做 - 直到它扩展到支持它。
HTH,Chris
答案 2 :(得分:0)
因为AR-JDBC 1.2.x和esp。当使用1.3.x时,可以保持JRuby的配置为,例如:
development:
adapter: mysql2
database: blog_development
username: blog
production:
adapter: mysql2
database: blog
pool: 50
# ... etc
比 Gemfile 简单地将 mysql2 等gems限制为MRI,将 jdbc-mysql 限制为JRuby:
source 'https://rubygems.org'
gem 'rails', '~> 3.2.17'
gem 'mysql2', :platform => :mri
gem 'activerecord-jdbc-adapter'
gem 'jdbc-mysql', :platform => :jruby
# ...
P.S。这个q似乎为回购创造了大量的流量,因此增加了一个最新的答案。