The current Beanstalk solution stack for Ruby + Puma uses the configuration file at /opt/elasticbeanstalk/support/conf/pumaconf.rb
and ignores the config/puma.rb
inside the Rails application directory.
I could override the file above with a custom one via .ebextensions
but am hesitant because I'd like to avoid breakage in case the path to the PID or - more importantly - unix socket files changes in upcoming solution stack versions.
What is the best practice for customizing the Puma configuration on Beanstalk?
We use Ruby+Passenger, but it sounds similar enough to your situation. We need to customize the nginx configuration file stored at /opt/elasticbeanstalk/support/conf/nginx_config.erb
, so we do it via .ebextensions
and sed
.
Here's an example to get you started:
.ebextensions/01-edit-nginx.config
container_commands:
01backup_config:
command: "cp -n /opt/elasticbeanstalk/support/conf/nginx_config.erb /opt/elasticbeanstalk/support/conf/nginx_config.erb.original"
02edit_config:
command: "sh -c \"sed '/string_to_insert_text_after/ i\
\ text_to_be_inserted;' /opt/elasticbeanstalk/support/conf/nginx_config.erb.original > /opt/elasticbeanstalk/support/conf/nginx_config.erb\""
This will make a backup copy of the configuration file (without overwriting it if it already exists, thanks to the -n
flag) and then insert the line "text_to_be_inserted" after the line "string_to_insert_text_after". You can pipe multiple sed
commands together to insert multiple lines.
On Amazon Linux 2, you can use Procfile
to do this, e.g.
web: puma -C /var/app/current/config/puma.rb
See the docs at https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ruby-platform-procfile.html for more information.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With