我已经将 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
这个问题的第一部分是解决 gem 。为了使这个过程在不更改代码的情况下工作,我在 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 与 mysql2)。有没有办法告诉 database.yml 文件或系统初始化程序根据 Ruby 环境是 MRI 还是 JRuby 选择适配器?
最佳答案
您可以在 database.yml 文件中使用 ERB:
development:
adapter: <%= defined?(JRUBY_VERSION) ? "mysql" : "mysql2" %>
...
关于mysql - Ruby:Rails:MRI 和 JRuby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7813748/