Trying JRuby on rails
There is a project which was built with Rails 8 + SolidCache + SolidQueue. Recently I switched it to Rails 7.2 (jruby 10.0.2.0 (3.4.2) 2025-08-07 cba6031bd0 OpenJDK 64-Bit Server VM 21.0.9+15-LTS on 21.0.9+15-LTS +indy +jit [x86_64-linux] ).
Here is some my note.
- Modify Gemfile && bundle install
# gem "rails", "~> 8.1.1"
gem "rails", "~> 7.2.0"
# gem "pg"
gem "activerecord-jdbcpostgresql-adapter", "~> 72.0", :platform => :jruby
# gem "solid_queue"
# good_job is a background job library using postgresql.
gem "good_job", "~> 4.13.1"
gem "warbler", "~> 2.1.0"
- Replace C dependencies (if exist)
Replace C libraries(like “pg”) with java libraries. Put jars in lib/java
- Generate warble configuration
jruby -S warble config
config/warble.rb
Warbler::Config.new do |config|
config.features = %w(runnable)
config.dirs = %w(app config db lib log script vendor tmp)
config.includes = FileList["config.ru", "Rakefile"]
config.java_libs += FileList["lib/java/*.jar"]
config.gems["rails"] = "7.2.3"
config.jar_extension = "jar"
end
background job rake task: lib/tasks/good_job.rake
namespace :job do
desc "start good_job"
task start: :environment do
$stdout.sync = true
$stderr.sync = true
stdout_logger = ActiveSupport::Logger.new(STDOUT)
log_level = (ENV["RAILS_LOG_LEVEL"] || "INFO").upcase
stdout_logger.level = ActiveSupport::Logger.const_get(log_level)
stdout_logger.formatter = ActiveSupport::Logger::Formatter.new
Rails.logger = stdout_logger
ActiveRecord::Base.logger = stdout_logger
GoodJob.logger = stdout_logger
GoodJob::CLI.start([])
end
end
- Pack
jruby -S warble
- Run
# migration
java -jar app.jar -S rails db:migrate
# web
java -jar app.jar -S rails s
# job
java -jar app.jar -S rake job:start