mysql - Ruby:Rails:MRI 和 JRuby

标签 mysql ruby-on-rails ruby jruby

我已经将 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/

相关文章:

ruby-on-rails - 页面加载时未应用布局

java - 表中的 JPA 实体将 int 主键转换为 String

ruby-on-rails - Rails 急切负载和限制

ruby-on-rails - 使用 rspec 进行测试 .consider_all_requests_local = false

ruby - #each 循环中的 #reduce 循环不会迭代整个数组

ruby - 托弗 API : What does the message "No pending pairing requests with specified pairing_phrase" mean?

mysql - 查询删除所有条目而不是选定的条目

php - 使用 PHP 更新 MySQL 表

php - preg_match_all数组插入mysql数据库循环无法正常工作

ruby-on-rails - rails 4 : Does Devise address session fixation by resetting session after login?