【发布时间】:2011-12-10 10:55:23
【问题描述】:
我已将 Ubuntu 11.04 上的 Rails 3.0.10/MRI 应用程序移植到 Ubuntu 11.04 上的 JRuby 1.6.4。我的目标是到达一个地方,我只需执行以下操作即可在 JRuby 下运行应用程序。
railsapp1> rbenv local jruby-1.6.4
railsapp1> rails server
为了让应用在 MRI 下运行,
railsapp1> rbenv local 1.9.2-p290
railsapp1> rails server
这个问题的第一部分是解决宝石。为了使这个过程在不更改代码的情况下工作,我在 Rails Gemfile 中做了以下操作
platforms :mri do
gem 'mysql2', '~>0.2.11'
end
platforms :jruby do
gem 'jruby-openssl'
gem 'activerecord-jdbcmysql-adapter'
end
这些 gem 语句是使用蛮力方法获得的,方法是使用 MRI/JRuby 和 SQLite/MySQL 的不同组合创建虚拟 rails 应用程序,然后从生成的 Gemfile 中为每个组合获取 gem 语句。
但这并没有完全做到这一点。我的 config/database.yml 文件如下所示:
development:
adapter: mysql2
database: doodad
username: doodad
password: doodad
host: localhost
此 config/database.yml 文件仅适用于 MRI 版本。对于 JRuby 版本,config/database.yml 文件如下所示:
development:
adapter: mysql
database: doodad
username: doodad
password: doodad
host: localhost
即文件之间的唯一区别是数据库适配器的名称(mysql vs mysql2)。有没有办法告诉 database.yml 文件或系统初始化程序根据 Ruby 环境是 MRI 还是 JRuby 来选择适配器?
【问题讨论】:
标签: mysql ruby-on-rails ruby jruby