sinatra / sinatra/sinatra

Middleware instantiated multiple times under JRuby

Open
#1,102 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

waiting for feedback
Dominant language
Ruby
Stars
12.5k
Forks
2.1k
PR merge metrics
No merged PRs in 30d

Description

Running a simple app on Puma under JRuby (in single mode with many threads), I've noticed that a single use statement in my Sinatra class definition causes that piece of middleware to be instantiated multiple times, instead of it being instantiated once and shared between threads (as one might suspect). Moving the use statement out of the class definition and into a rackup script solves the problem, as does calling run MyApp.new instead of run MyApp from the rackup script.

Sinatra 1.4.7, Puma 3.1.0, JRuby 9.0.5.0, OpenJDK 7.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the reported behavior with Sinatra 1.4.7, Puma 3.1.0, JRuby 9.0.5.0, and OpenJDK 7 using a class-level use statement. Compare middleware construction in that setup with a rackup-level use and with run MyApp.new; done means the middleware is instantiated once and shared across threads.

Written by the indexing model from the issue text.

Assessment

Tech stack
ruby
Domain
backend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.