如何透過 Warbler 在 JVM 上部署 Rails 應⽤用Jason Lee (LeeChSien)[email protected]2015 / 09 / 11
View Slide
關於我• 李致賢 (Jason Lee) a.k.a LeeChSien• 即將畢業於政治⼤大學 (NCCU CS Master)• as a Ruby Developer since 2012• Web Developer in
想⽤用 Ruby / Rails 來開發產品, 但是...
客⼾戶的環境你想像中
客⼾戶的環境實際的情形
客⼾戶的環境• 環境沒有 Ruby Runtime• 產品需要封裝 (保護 Source Code)• Windows Only….
Charles Nutter @ Taipei (2014/04/29)
嘗試使⽤用 JRuby ?
JRubyWrite once, run anywhere
JRuby
如何使⽤用 JRuby 開發?
JRuby 版本⽐比較JRuby 1.7.0 Ruby 1.9.3JRuby 1.7.4 Ruby 2.0JRuby 9.0.0.0 Ruby 2.2
使⽤用相容的 Gems• For example:activerecord-jdbc-adapter
Migrate from MRI Rails 4.2• byebug -> disable• web-console -> disable• binding_of_caller• therubyracer -> therubyrhino
C Extension Alternatives• Nokogiri - pure java version• RMagick - RMagick4J• therubyracer - therubyrhinoJRuby Wiki:C-Extension-Alternatives
Thread-safety• Rails 本⾝身是 Thread-safe• 第三⽅方 Gems 必須是 Thread-safe• Sidekiq Wiki:Problems-and-Troubleshooting#threading• 你的程式碼必須是 Thread-safe
Thread-safety• Global variables• Class variables• Class instance variables
Race condition
Memoization
Mutex Lock
Archive Your App with Warbler
Warbler• Warbler 將你的 App 打包為可執⾏行的 .war fileshttps://github.com/jruby/warbler• Start Server?• Rake task?
Warbler• Configuration• warble.rb• web.xml.erbWarbler 1.4.X JRuby 1.7.XWarbler 2.0.0 rc JRuby 9.0.0.0
Compile .rb to .classwarble.rb
Compile .rb to .class
JRuby-rack-workerweb.xml.erbhttps://github.com/kares/jruby-rack-worker
Unlimited Strength Crypto• Install the "Unlimited Strength" policy files fromOracle• Disable the crypto restriction programmaticallyJRuby Wiki:UnlimitedStrengthCrypto
Tzinfo-data• No timezone data source could be found. To resolve this, either install TZInfo::Data
Demohttps://github.com/LeeChSien/rails-warbler-boilerplate
Another Choice - TorqueBox
Thank you!