Middleware instantiated multiple times under JRuby
Nobody has claimed this yet.
- 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
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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