我已将Ubuntu 11.04上的Rails 3.0.10/MRI应用程序移植到Ubuntu 11.04上的JRuby 1.6.4。我的目标是到达一个地方,我只需要执行以下操作,在JRuby下运行应用程序。Ruby:Rails:MRI和JRuby
railsapp1> rbenv local jruby-1.6.4
railsapp1> rails server
并得到应用MRI下工作,
railsapp1> rbenv local 1.9.2-p290
railsapp1> rails server
这个问题的第一部分是要解决的宝石。为了使无需更改代码这个过程中我所做的作品在滑轨的Gemfile
platforms :mri do
gem 'mysql2', '~>0.2.11'
end
platforms :jruby do
gem 'jruby-openssl'
gem 'activerecord-jdbcmysql-adapter'
end
那些宝石语句下面通过创建与MRI/JRuby和SQLite的不同组合的虚拟Rails应用/ MySQL的使用蛮力法得到然后从生成的Gemfiles中为每个组合获取gem语句。
虽然这并不完全。我的config/database.yml文件如下所示:
development:
adapter: mysql2
database: doodad
username: doodad
password: doodad
host: localhost
此config/database.yml文件仅适用于MRI版本。对于JRuby的版本,在配置/ database.yml文件看起来是这样的:
development:
adapter: mysql
database: doodad
username: doodad
password: doodad
host: localhost
即文件之间唯一的区别是数据库适配器(MySQL的VS mysql2)的名称。有没有办法告诉database.yml文件或系统初始化程序根据Ruby环境是MRI还是JRuby来选择适配器?
谢谢!我最终使用了适配器:<%= RUBY_ENGINE ==“jruby”? “mysql”:“mysql2”%> –