-
-
Save dhh/782fb925b57450da28c1e15656779556 to your computer and use it in GitHub Desktop.
ruby '2.7.1' | |
gem 'rails', github: 'rails/rails' | |
gem 'tzinfo-data', '>= 1.2016.7' # Don't rely on OSX/Linux timezone data | |
# Action Text | |
gem 'actiontext', github: 'basecamp/actiontext', ref: 'okra' | |
gem 'okra', github: 'basecamp/okra' | |
# Drivers | |
gem 'mysql2' | |
gem 'sqlite3' # Used for asset generation in BK | |
gem 'redis', '~> 4.0' | |
gem 'redis_connectable', github: 'basecamp/redis_connectable' | |
gem 'redis-namespace' | |
gem 'connection_pool' | |
gem 'image_processing', '~> 1.2' | |
gem 'puma', '>= 4.3.3', github: 'puma/puma' | |
# JavaScript and assets | |
gem 'webpacker', '~> 5.1.1' | |
gem 'sprockets', github: 'rails/sprockets' | |
gem 'sprockets-rails', github: 'rails/sprockets-rails' | |
gem 'jbuilder', '~> 2.9', '>= 2.9.1', github: 'rails/jbuilder' | |
gem 'sassc-rails', '~> 2.1' | |
gem 'sassc', '<= 2.1' | |
gem 'local_time', '~> 2.0' | |
gem 'turbo', github: 'basecamp/turbo' | |
# Security | |
gem 'bcrypt', '~> 3.1.7' | |
gem 'pwned', '~> 2.0' | |
gem 'rotp' | |
gem 'webauthn' | |
gem 'rack-ratelimit', github: 'jeremy/rack-ratelimit' | |
# Jobs | |
gem 'resque', '~> 2.0.0' | |
gem 'resque-multi-job-forks', '~> 0.5' | |
gem 'resque-pool', github: 'nevans/resque-pool' | |
gem 'resque-scheduler', github: 'resque/resque-scheduler' | |
gem 'resque-pause', github: 'basecamp/resque-pause' | |
gem 'resque-web', require: 'resque_web' | |
gem 'resque-scheduler-web', github: 'mattgibson/resque-scheduler-web' | |
gem 'sinatra', github: 'sinatra/sinatra' | |
# Storage | |
gem 'aws-sdk-s3', '~> 1.48.0' | |
gem 'activestorage-redundancy', github: 'basecamp/activestorage-redundancy' | |
gem 'activestorage-office-previewer', '~> 0.1' | |
# Search | |
gem 'elasticsearch-model', github: 'elastic/elasticsearch-rails', branch: '6.x' | |
gem 'elasticsearch-rails', github: 'elastic/elasticsearch-rails', branch: '6.x' | |
gem 'html_scrubber', github: 'basecamp/html_scrubber' | |
# Push notifications | |
gem 'aws-sdk-pinpoint' | |
# Monitoring | |
gem 'easymon', '~> 1.4.2' | |
gem 'sentry-raven' | |
# Logging/instrumentation | |
gem 'rails_structured_logging', github: 'basecamp/rails-structured-logging' | |
gem 'full_request_logger', github: 'basecamp/full_request_logger' | |
gem 'critter', '~> 0.3.0', github: 'basecamp/critter', require: false | |
gem 'activejob-stats', github: 'basecamp/activejob-stats' | |
# Profiling/troubleshooting | |
gem 'rbtrace' | |
gem 'stackprof' | |
gem 'rack-mini-profiler' | |
gem 'flamegraph' | |
# Queenbee | |
gem 'queenbee', github: 'basecamp/queenbee-plugin' | |
gem 'actionpack-xml_parser' | |
gem 'countries' | |
# vCard parsing | |
gem 'pdi', github: 'basecamp/pdi', branch: 'utf-8-default' | |
# Supervised rails console in production environments | |
gem 'console1984', github: 'basecamp/console1984' | |
# Other | |
gem 'rake', github: 'ruby/rake' | |
gem 'platform_agent' | |
gem 'useragent', github: 'basecamp/useragent' | |
gem 'geared_pagination', '>= 1.0.0' | |
gem 'rqrcode' | |
gem 'base32' | |
gem 'httparty' | |
gem 'bootsnap', '>= 1.4.2', require: false # Reduces boot times through caching; required in config/boot.rb | |
gem 'rspamd', github: 'basecamp/rspamd-ruby' | |
gem 'redis_object', github: 'basecamp/redis_object' | |
gem 'ruby-progressbar', require: false | |
gem 'rinku', require: 'rails_rinku' | |
gem 'active_record_encryption', github: 'basecamp/active_record_encryption' | |
gem 'simpleidn' | |
group :development, :test do | |
gem 'byebug' | |
gem 'break' | |
gem 'spring' | |
# Code critics | |
gem 'rubocop', '>= 0.72', require: false | |
gem 'rubocop-performance', require: false | |
gem 'rubocop-rails', require: false | |
gem 'scss_lint', '~> 0.50', require: false | |
gem 'bundler-audit', '~> 0.4', github: 'basecamp/bundler-audit', branch: 'thor-bump', require: false | |
gem 'brakeman', '>= 4.0', require: false | |
gem 'benchmark-ips', require: false | |
end | |
group :development do | |
gem 'web-console' | |
gem 'listen', '>= 3.0.5', '< 3.2' | |
gem 'faker', require: false | |
# Deploys, local CI | |
gem 'haybales', github: 'basecamp/haybales' | |
end | |
group :test do | |
gem 'mocha' | |
gem 'capybara', '>= 2.15', github: 'teamcapybara/capybara' | |
gem 'selenium-webdriver' | |
gem 'webmock', github: 'bblimke/webmock' | |
gem 'vcr' | |
end |
Any cool stuff in this closed gems to be open one day?
# Drivers
gem 'redis_connectable', github: 'basecamp/redis_connectable'
# Search
gem 'html_scrubber', github: 'basecamp/html_scrubber'
# Logging/instrumentation
gem 'rails_structured_logging', github: 'basecamp/rails-structured-logging'
gem 'critter', '~> 0.3.0', github: 'basecamp/critter', require: false
# Other
gem 'useragent', github: 'basecamp/useragent'
gem 'rspamd', github: 'basecamp/rspamd-ruby'
# shouldn't be in in Drivers close to redis?
gem 'redis_object', github: 'basecamp/redis_object'
# shouldn't be in in Security?
gem 'active_record_encryption', github: 'basecamp/active_record_encryption'
# Deploys, local CI
gem 'haybales', github: 'basecamp/haybales'
Alphabetical order is way more efficient than creating categories
why no simplecov?
@dhh what is your
package.json
?
That's a good question. These days, it's almost as telling as the Gemfile.
What do you use from mocha? Something you can't do with Minitest::Mock?
mocha is for client side javascript testing, and minitest is not in the same level
That's a different mocha... The mocha Ruby gem is for mocking and stubbing: https://mocha.jamesmead.org/
I would love to see structured logging as a Rails default in production.
Obviously very interested to peek into
gem 'rails_structured_logging', github: 'basecamp/rails-structured-logging'
@codextremist Gemfiles are required in the order you define and gems can have order-dependant logic. Alphabetical ordering is a bad idea.
@dhh Do you plan to open source the rspamd gem at some point? I'd have a use case for it. :)
@codextremist Gemfiles are required in the order you define and gems can have order-dependant logic. Alphabetical ordering is a bad idea.
@krainboltgreene some example please
@codextremist Gemfiles are required in the order you define and gems can have order-dependant logic. Alphabetical ordering is a bad idea.
@krainboltgreene Never had that problem before, after dealing with at least dozens of Rails projects at least.
I just feel so pointless to organize gems by categories. If you need to lookup your Gemfile for a specific gem, I doubt that these categories will be of any help.
Don't see any authentication gem such as Devise... is it done totally "manually" ?
@dhh why use a "more-lightweight-than-Rails" framework Sinatra on top of already having Rails gem installed ?
I would understand if you were using Sinatra for Jobs in antoher codebase/repo/server for specific "thinner" needs, but as you're using a Majestic Monolith, why use Sinatra on top of Rails ? What was Rails missing in terms of jobs management that you'd need to use Sinatra on the same server ?
@codextremist Gemfiles are required in the order you define and gems can have order-dependant logic. Alphabetical ordering is a bad idea.
@krainboltgreene some example please
dot-env gem need to be loaded before rails
@misner I do not think he added Sinatra for the sake of adding Sinatra to the project. It's used by other gems such as Resque (check their repo here: https://github.com/resque/resque). You will notice that they are using it to offer you a "nice dashboard".
@dhh any chance of an update to this? would be interesting to see how it's evolved
what are you using for API (generation), e.g. what serialization approach? render json, or jbuilder?
Thanks for posting. What does "BK" mean?
gem 'sqlite3' # Used for asset generation in BK
BuildKite I assume, but they're using GitHub Actions now.
Thanks!