/ / Portierung einer Ruby / Rails / MRI App zu JRuby - mysql, ruby, sqlite3, jruby, rbenv

Portierung einer Ruby / Rails / MRI App auf JRuby - mysql, ruby, sqlite3, jruby, rbenv

Ich habe eine Ruby / Rails-Entwicklungsumgebungmit Rbenv, MRI Ruby (1.9.2-p290), Schienen 3.0.9 und SQLite3. Ich möchte es nach JRuby portieren, aber tun Sie es so, dass ich nicht mehr tun muss, als "rbenv local jruby-1.6.4" und "rails server" im Stammverzeichnis der Rails-Anwendung auszuführen, um es zu benutzen mit JRuby, und "rbenv local 1.9.2-p290" und "rails serer", um es mit MRI Ruby zu verwenden.

Mir ist bewusst, dass die Edelsteine ​​für den Zugriff auf SQLite sindanders für Ruby oder JRuby, aber wie schreibt man das Gemfile so, dass die MRI-relevanten Edelsteine ​​aufgenommen werden, wenn der Rubin MRI ist, und die JRuby-relevanten Edelsteine ​​aufgenommen werden, wenn der Rubin JRuby ist?

Ich muss es auch zu MySQL anstelle von SQLite portieren. Welche Edelsteine ​​muss ich hier für Ruby und JRuby verwenden?

Für die Aufzeichnung verwende ich Ubuntu 11.04, Ruby 1.9.2-p290, JRuby 1.6.4 und Rails 3.0.9 oder 3.0.10.

Antworten:

2 für die Antwort № 1

Wir haben eine große Rails-Anwendung zuletzt auf JRuby portiertJahr und es war eine erstaunliche Menge an Arbeit. Zugegeben, ein Teil davon hatte damit zu tun, dass die App ziemlich schlecht geschrieben war und viel alten Code hatte, aber trotzdem. Falls Sie sich fragen: Die meisten unserer Probleme kamen von Edelsteinen, die wir verwendeten, die dann manchmal auf z. FFI, das zu dieser Zeit nicht richtig mit JRuby arbeitete. Ein späterer Anschluss an Rubinius schien mir weniger schmerzhaft, wurde aber aufgegeben, um bei MRI zu bleiben.

Für das Gemfile gibt es ein a platform Option, die Sie verwenden können. Hier ist ein Beispiel aus den Bundler-Dokumenten:

gem "weakling",   :platforms => :jruby
gem "ruby-debug", :platforms => :mri_18
gem "nokogiri",   :platforms => [:mri_18, :jruby]

Es hat auch eine Blockform:

platforms :jruby do
gem "foo"
end

Beide Formen funktionieren gut, da

Alle Operationen mit Gruppen (Bündel installieren, Bundler.setup, Bundler.require) verhält sich genauso wie wenn Gruppen nicht übereinstimmen die aktuelle Plattform wurde explizit ausgeschlossen.

Als ein Juwel für MySQL würde ich das passend benannte verwenden mysqlscheint es zu sein jdbc-mysql für JRuby.