From 19fa4153d506b87d775d7dcb75ec1a3d969aa77f Mon Sep 17 00:00:00 2001 From: Petrik Date: Fri, 3 Jan 2025 20:44:09 +0100 Subject: [PATCH] [rails] Add Iodine server +-------------+---------+------+------+------+------+-------+------------+--------------+ | name|plaintext|update| json| db| query|fortune|cached-query|weighted_score| +-------------+---------+------+------+------+------+-------+------------+--------------+ | rails| 24599| 10016| 84462| 24975| 15127| 15241| 16647| 1207| | rails-iodine| 176699| 15306|116194| 32006| 25107| 18626| 31326| 1868| --- frameworks/Ruby/rails/Gemfile | 22 ++++++++------- frameworks/Ruby/rails/Gemfile.lock | 2 ++ frameworks/Ruby/rails/README.md | 6 +++-- frameworks/Ruby/rails/benchmark_config.json | 25 ++++++++++++++++- frameworks/Ruby/rails/rails-agoo.dockerfile | 2 +- frameworks/Ruby/rails/rails-falcon.dockerfile | 2 +- frameworks/Ruby/rails/rails-iodine.dockerfile | 27 +++++++++++++++++++ frameworks/Ruby/rails/rails-mysql.dockerfile | 2 +- frameworks/Ruby/rails/rails.dockerfile | 2 +- 9 files changed, 74 insertions(+), 16 deletions(-) create mode 100644 frameworks/Ruby/rails/rails-iodine.dockerfile diff --git a/frameworks/Ruby/rails/Gemfile b/frameworks/Ruby/rails/Gemfile index 9b7458ae417..0afad6b04cc 100644 --- a/frameworks/Ruby/rails/Gemfile +++ b/frameworks/Ruby/rails/Gemfile @@ -4,23 +4,27 @@ gem 'rails', '~> 8.0.0' gem 'redis', '~> 5.0' gem 'tzinfo-data' -group :mysql do +group :mysql, optional: true do gem 'trilogy', '~> 2.8.1' end -group :postgresql do +group :postgresql, optional: true do gem 'pg', '~> 1.5' end -group :falcon do - gem 'falcon', '~> 0.47', require: false +group :agoo, optional: true do + gem 'agoo', require: false + gem 'rackup' end -group :puma do - gem 'puma', '~> 6.4', require: false +group :iodine, optional: true do + gem 'iodine', '~> 0.7', require: false end -group :agoo do - gem 'agoo', require: false - gem 'rackup' +group :falcon, optional: true do + gem 'falcon', '~> 0.47', require: false +end + +group :puma, optional: true do + gem 'puma', '~> 6.4', require: false end diff --git a/frameworks/Ruby/rails/Gemfile.lock b/frameworks/Ruby/rails/Gemfile.lock index 8db47000927..18ecc70ac8e 100644 --- a/frameworks/Ruby/rails/Gemfile.lock +++ b/frameworks/Ruby/rails/Gemfile.lock @@ -136,6 +136,7 @@ GEM io-endpoint (0.14.0) io-event (1.7.3) io-stream (0.6.1) + iodine (0.7.58) irb (1.14.1) rdoc (>= 4.0.0) reline (>= 0.4.2) @@ -269,6 +270,7 @@ PLATFORMS DEPENDENCIES agoo falcon (~> 0.47) + iodine (~> 0.7) pg (~> 1.5) puma (~> 6.4) rackup diff --git a/frameworks/Ruby/rails/README.md b/frameworks/Ruby/rails/README.md index de1ba2aacf0..674c60b402f 100644 --- a/frameworks/Ruby/rails/README.md +++ b/frameworks/Ruby/rails/README.md @@ -12,9 +12,11 @@ comparing a variety of web platforms. The tests were run with: -- [Ruby 3.3](http://www.ruby-lang.org/) -- [Rails 7.2](http://rubyonrails.org/) +- [Ruby 3.4](http://www.ruby-lang.org/) +- [Rails 8.0](http://rubyonrails.org/) - [Puma 6.4](http://puma.io/) +- [Iodine](https://github.com/boazsegev/iodine) +- [Falcon](https://github.com/socketry/falcon) - [MySQL](https://dev.mysql.com/) - [PostgreSQL](https://www.postgresql.org/) - [Redis 6](https://redis.io) diff --git a/frameworks/Ruby/rails/benchmark_config.json b/frameworks/Ruby/rails/benchmark_config.json index f663c793a3d..3571ea8ca5c 100644 --- a/frameworks/Ruby/rails/benchmark_config.json +++ b/frameworks/Ruby/rails/benchmark_config.json @@ -66,7 +66,30 @@ "database_os": "Linux", "display_name": "rails-falcon", "notes": "", - "versus": "rack-falcon-mri" + "versus": "rack-falcon-mri-sequel-raw" + }, + "iodine": { + "db_url": "/db", + "json_url": "/json", + "query_url": "/queries?queries=", + "fortune_url": "/fortunes", + "update_url": "/updates?queries=", + "plaintext_url": "/plaintext", + "cached_query_url": "/cached?queries=", + "port": 8080, + "approach": "Realistic", + "classification": "Fullstack", + "database": "Postgres", + "framework": "rails", + "language": "Ruby", + "orm": "Full", + "platform": "Rack", + "webserver": "Iodine", + "os": "Linux", + "database_os": "Linux", + "display_name": "rails-iodine", + "notes": "", + "versus": "rack-iodine-mri-sequel-raw" }, "agoo": { "db_url": "/db", diff --git a/frameworks/Ruby/rails/rails-agoo.dockerfile b/frameworks/Ruby/rails/rails-agoo.dockerfile index 507077565bb..539bac5ac20 100644 --- a/frameworks/Ruby/rails/rails-agoo.dockerfile +++ b/frameworks/Ruby/rails/rails-agoo.dockerfile @@ -15,7 +15,7 @@ ENV LD_PRELOAD=libjemalloc.so.2 COPY ./Gemfile* /rails/ ENV BUNDLE_FORCE_RUBY_PLATFORM=true -ENV BUNDLE_WITHOUT=mysql:falcon:puma +ENV BUNDLE_WITH=postgresql:agoo RUN bundle install --jobs=8 COPY . /rails/ diff --git a/frameworks/Ruby/rails/rails-falcon.dockerfile b/frameworks/Ruby/rails/rails-falcon.dockerfile index 2e0c659e34b..06501a4cff2 100644 --- a/frameworks/Ruby/rails/rails-falcon.dockerfile +++ b/frameworks/Ruby/rails/rails-falcon.dockerfile @@ -15,7 +15,7 @@ ENV LD_PRELOAD=libjemalloc.so.2 COPY ./Gemfile* /rails/ ENV BUNDLE_FORCE_RUBY_PLATFORM=true -ENV BUNDLE_WITHOUT=mysql:agoo:puma +ENV BUNDLE_WITH=postgresql:falcon RUN bundle install --jobs=8 COPY . /rails/ diff --git a/frameworks/Ruby/rails/rails-iodine.dockerfile b/frameworks/Ruby/rails/rails-iodine.dockerfile new file mode 100644 index 00000000000..ffa3b078dd0 --- /dev/null +++ b/frameworks/Ruby/rails/rails-iodine.dockerfile @@ -0,0 +1,27 @@ +FROM ruby:3.4 + +RUN apt-get update -yqq && apt-get install -yqq --no-install-recommends redis-server + +EXPOSE 8080 +WORKDIR /rails + +# ENV RUBY_YJIT_ENABLE=1 YJIT is enabled in config/initializers/enable_yjit.rb + +# Use Jemalloc +RUN apt-get update && \ + apt-get install -y --no-install-recommends libjemalloc2 +ENV LD_PRELOAD=libjemalloc.so.2 + +COPY ./Gemfile* /rails/ + +ENV BUNDLE_FORCE_RUBY_PLATFORM=true +ENV BUNDLE_WITH=postgresql:iodine +RUN bundle install --jobs=8 + +COPY . /rails/ + +ENV RAILS_ENV=production_postgresql +ENV PORT=8080 +ENV REDIS_URL=redis://localhost:6379/0 +CMD service redis-server start && \ + bundle exec iodine diff --git a/frameworks/Ruby/rails/rails-mysql.dockerfile b/frameworks/Ruby/rails/rails-mysql.dockerfile index 9e7083a1f4d..3477cc7640f 100644 --- a/frameworks/Ruby/rails/rails-mysql.dockerfile +++ b/frameworks/Ruby/rails/rails-mysql.dockerfile @@ -15,7 +15,7 @@ ENV LD_PRELOAD=libjemalloc.so.2 COPY ./Gemfile* /rails/ ENV BUNDLE_FORCE_RUBY_PLATFORM=true -ENV BUNDLE_WITHOUT=postgresql:agoo:falcon +ENV BUNDLE_WITH=mysql:puma RUN bundle install --jobs=8 COPY . /rails/ diff --git a/frameworks/Ruby/rails/rails.dockerfile b/frameworks/Ruby/rails/rails.dockerfile index 451a4e5bfac..64f44ef0ea6 100644 --- a/frameworks/Ruby/rails/rails.dockerfile +++ b/frameworks/Ruby/rails/rails.dockerfile @@ -15,7 +15,7 @@ ENV LD_PRELOAD=libjemalloc.so.2 COPY ./Gemfile* /rails/ ENV BUNDLE_FORCE_RUBY_PLATFORM=true -ENV BUNDLE_WITHOUT=mysql:agoo:falcon +ENV BUNDLE_WITH=postgresql:puma RUN bundle install --jobs=8 COPY . /rails/