我已將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」%> –