Parallel Specs

A focused extraction of the RSpec pieces from parallel_tests with only the parts this gem actually needs:
- a live local dashboard
- a plain-text CI / LLM friendly summary
- runtime-log generation for balanced spec splitting
- modern Ruby only
Setup
Add the gem to your app's Gemfile:
group :test do
gem 'parallel_specs'
end
Then install it:
bundle install
For Rails apps, configure the test database name to include TEST_ENV_NUMBER. The first worker uses a blank value, then workers 2, 3, and so on use their worker number:
# config/database.yml
test:
database: my_app_test<%= ENV['TEST_ENV_NUMBER'] %>
If you previously used parallel_tests, this is the same database naming convention. Once the parallel_specs Rake tasks are available, you can remove parallel_tests if you were only keeping it for database setup.
Commands
bundle exec parallel_specs
bundle exec parallel_specs -n 6
bundle exec parallel_specs --dashboard-mode plain
bundle exec parallel_specs --plain
bundle exec parallel_specs --plain-dashboard
bundle exec parallel_specs --test-options='--tag ~type:system'
bundle exec parallel_specs --record-runtime
Local TTY runs render the interactive dashboard. CI and other non-TTY runs automatically fall back to the plain text summary. Use --plain, --dashboard-mode plain, or --plain-dashboard to force plain dashboard output without setting an environment variable.
Plain dashboard output is intentionally minimal: it prints the examples counter and elapsed time, then relies on the process exit status and the final RSpec summary for success or failure. It does not print per-worker rows or current example names.
Runtime balancing
Regular runs automatically use tmp/parallel_runtime_rspec.log when it contains enough data.
Generate or refresh that file with:
bundle exec parallel_specs --record-runtime
Runtime logs are replaced only after a successful, complete run where every worker produces its runtime log. Failed, interrupted, incomplete, or no-spec runs preserve the previous runtime log.
Or point at a custom file:
bundle exec parallel_specs --record-runtime --runtime-log tmp/my_runtime.log
--runtime-log PATH is used as the input path for balancing and, with --record-runtime, as the output destination for the completed run.
Rails database tasks
Rails apps that use TEST_ENV_NUMBER in config/database.yml can prepare per-worker test databases without depending on parallel_tests.
The most common workflow is:
# Create all worker databases once
bundle exec rake parallel:create
# Load the current schema into each worker database
bundle exec rake parallel:load_schema
# Run the specs
bundle exec parallel_specs
After changing migrations, refresh the worker databases with:
bundle exec rake parallel:prepare
parallel:prepare checks for pending migrations, dumps the schema or structure once, and then loads it into each worker database.
To reset everything from scratch:
bundle exec rake parallel:drop
bundle exec rake parallel:create
bundle exec rake parallel:load_schema
Each task accepts an optional worker count:
bundle exec rake 'parallel:create[4]'
bundle exec rake 'parallel:prepare[4]'
bundle exec parallel_specs -n 4
If no count is provided, the tasks use PARALLEL_SPECS_PROCESSORS or the detected processor count. Use the same count for database prep and spec runs.
The gem also exposes compatible parallel:setup, parallel:migrate, parallel:rollback, parallel:load_structure, parallel:seed, and parallel:rake tasks.
Set PARALLEL_SPECS_RAILS_ENV to prepare an environment other than test.
Environment variables
The supported environment variables are:
PARALLEL_SPECS_PROCESSORSsets the default worker count when-nis not provided and when Rails database tasks are run without a count.PARALLEL_SPECS_DASHBOARD_MODEcan beinteractiveorplainto override automatic dashboard selection. You can also use--plain,--dashboard-mode plain, or--plain-dashboardfor a single run.PARALLEL_SPECS_HEARTBEAT_INTERVALsets the plain-dashboard heartbeat interval in seconds.PARALLEL_SPECS_FULL_RERUN_COMMANDS=1prints full failed-worker rerun commands even when they are long.PARALLEL_SPECS_RERUN_COMMAND_SPEC_FILE_LIMITsets how many spec files a failed-worker rerun command may include before it is summarized instead of printed. The default is 25.PARALLEL_SPECS_RERUN_COMMAND_CHAR_LIMITsets the maximum failed-worker rerun command length before it is summarized instead of printed. The default is 2000.PARALLEL_SPECS_RAILS_ENVsets the Rails environment used by theparallel:*database tasks. The default istest.CImakes dashboard output default to plain mode.
Worker processes continue to receive TEST_ENV_NUMBER for compatibility with existing test-environment isolation setup.
This gem does not intentionally preserve the old parallel_tests executable names, formatter paths, or environment variable aliases.
Acknowledgements
This gem is largely based on the excellent work from parallel_tests, especially its approach to grouping test files, assigning TEST_ENV_NUMBER, and preparing per-worker Rails test databases.