首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby: Rails: MRI和JRuby

Ruby: Rails: MRI和JRuby
EN

Stack Overflow用户
提问于 2011-10-19 05:07:34
回答 2查看 1.2K关注 0票数 2

我已经将我在Ubuntu11.04上的Rails 3.0.10/MRI应用程序移植到了Ubuntu11.04上的JRuby 1.6.4。我的目标是在JRuby下运行应用程序,只需执行以下操作即可。

代码语言:javascript
复制
railsapp1> rbenv local jruby-1.6.4
railsapp1> rails server

为了让这个应用在核磁共振下工作,

代码语言:javascript
复制
railsapp1> rbenv local 1.9.2-p290
railsapp1> rails server

这个问题的第一部分是解决gem。为了在不更改代码的情况下使此过程正常工作,我在Rails Gemfile中执行了以下操作

代码语言:javascript
复制
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文件如下所示:

代码语言:javascript
复制
development:
    adapter: mysql2
    database: doodad
    username: doodad
    password: doodad
    host: localhost

此config/database.yml文件仅适用于MRI版本。对于JRuby版本,配置/数据库.yml文件如下所示:

代码语言:javascript
复制
development:
    adapter: mysql
    database: doodad
    username: doodad
    password: doodad
    host: localhost

也就是说,文件之间唯一的区别是数据库适配器的名称(mysql和mysql2)。有没有办法告诉database.yml文件或系统初始化器根据Ruby环境是MRI还是JRuby来选择适配器?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-19 06:30:24

您可以在database.yml文件中使用ERB:

代码语言:javascript
复制
development:
  adapter: <%= defined?(JRUBY_VERSION) ? "mysql" : "mysql2" %>
  ...
票数 7
EN

Stack Overflow用户

发布于 2011-10-19 05:18:01

如果你所需要做的就是旋转你的database.yml文件,那么你已经做得很好了。我通常避免将其签入到存储库,因为不同的开发人员有不同的配置,而不是只提供示例文件。

同样,在部署时,服务器有一个在部署之间共享的持久配置文件。这允许您微调设置,而不必为了适应一台服务器上的奇怪边缘情况而对存储库进行更改。

如果您仍然对此感到困扰,您可以在JRuby mysql gem周围制作一个包装器,将其注册为mysql2以便进行配置,但这可能是一个危险的游戏,因为您基本上是躺在您的配置中,误导那些可能想要诊断他们所遇到的问题的人。在这个意义上,人们包括“未来的你”,他们已经忘记了这个黑客攻击。

更安全的替代方案是有两个不同但相似的开发环境。你可以随心所欲地叫它们:

代码语言:javascript
复制
development_common: &development_common
  database: doodad
  username: doodad
  password: doodad
  host: localhost

development_jruby:
  <<: *development_common
  adapter: mysql

development_ruby:
  <<: *development_common
  adapter: mysql2

将您的本地环境设置为所需的一个或另一个并不难,如果在两个环境中都进行集成测试,则可以通过根据需要设置RAILS_ENV在两者之间切换。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7813748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档