我正在开发JRuby on Rails应用程序,该应用程序具有JRuby-1.6.7和Rails 3.2.2
我有mysql数据库。我正在尝试数据库适配器。
我使用了mysql2和jdbcmysql数据库适配器。两者都在工作。
但如果我在一段时间内没有访问应用程序,并且在那之后当我访问它时,它会给出如下错误
undefined method `explain' for #<ActiveRecord::ConnectionAdapters::MySQLAdapter:0x1139ba37>
我应该更喜欢哪个数据库适配器?部署后我的应用程序会正常工作吗?
我以前也遇到过同样的错误,但经过一些努力,我在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
希望能有所帮助。
我尝试了@Vik的降低activerecord jdbc的解决方案,但它对我不起作用,导致了更多的问题。
我在活动记录jdbc github问题列表中发现了这一点:
https://github.com/jruby/activerecord-jdbc-adapter/issues/159
基本上,它猴子补丁新的解释方法什么都不做——直到它扩展到支持它
HTH,Chris
自AR-JDBC 1.2.x以来,尤其是在使用1.3.x时,可以保持JRuby的配置,例如:
development:
adapter: mysql2
database: blog_development
username: blog
production:
adapter: mysql2
database: blog
pool: 50
# ... etc
与Gemfile相比,只需将mysql2等gem限制为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似乎为回购产生了大量流量,因此添加了一个最新的答案。