From 17fa4eac3e6c1b2bc6678121ed06fa828f71fab5 Mon Sep 17 00:00:00 2001 From: kazukifujii <32835806+kazukifujii@users.noreply.github.com> Date: Thu, 12 Dec 2019 23:46:32 +0900 Subject: [PATCH] feat(appswerver): Add new appserver config params for passenger (#227) * chore: add new webserver_config_params * style: Fixed failing rubocop lints. * chore: add PassengerMaxPreloaderIdleTime params to webserver_config * fix(appserver): fixed constants and error document values where the syntax violates the convention * test: added webserver_config_params test --- docs/source/attributes.rst | 25 +++++++++++++++ libraries/drivers_appserver_passenger.rb | 13 ++++++-- spec/unit/recipes/configure_spec.rb | 18 +++++++++++ .../appserver.apache2.passenger.conf.erb | 32 +++++++++++++++++++ 4 files changed, 86 insertions(+), 2 deletions(-) diff --git a/docs/source/attributes.rst b/docs/source/attributes.rst index 60c846b3..41b1a747 100644 --- a/docs/source/attributes.rst +++ b/docs/source/attributes.rst @@ -564,6 +564,31 @@ passenger made to your web server. Useful for certain hybrid static/dynamic web sites. +- ``app['appserver']['pool_idle_time']`` + + - **Type:** Integer + - **Default:** 300 + - Sets the ``PoolIdleTime`` parameter + +- ``app['appserver']['max_request_queue_size']`` + + - **Type:** Integer + - **Default:** 100 + - Sets the ``MaxRequestQueueSize`` parameter + +- ``app['appserver']['error_document']`` + + - **Type:** Hash + - **Default:** off + - Sets the { "status": "file" } parameter + e.g. { "500": "500.html", "503": "503.html" } + +- ``app['appserver']['passenger_max_preloader_idle_time']`` + + - **Type:** Integer + - **Default:** 300 + - Sets the ``PassengerMaxPreloaderIdleTime`` parameter + webserver ~~~~~~~~~ diff --git a/libraries/drivers_appserver_passenger.rb b/libraries/drivers_appserver_passenger.rb index dd0159f8..e8dc331c 100644 --- a/libraries/drivers_appserver_passenger.rb +++ b/libraries/drivers_appserver_passenger.rb @@ -5,7 +5,16 @@ module Appserver class Passenger < Drivers::Appserver::Base adapter :passenger allowed_engines :passenger - output filter: %i[max_pool_size min_instances mount_point] + WEBSERVER_CONFIG_PARAMS = %i[ + max_pool_size + min_instances + mount_point + pool_idle_time + max_request_queue_size + error_document + passenger_max_preloader_idle_time + ].freeze + output filter: WEBSERVER_CONFIG_PARAMS def manual_action(action); end @@ -17,7 +26,7 @@ def add_appserver_service_context; end def webserver_config_params o = out - Hash[%i[max_pool_size min_instances mount_point].map { |k| [k, o[k]] }].reject { |_k, v| v.nil? } + Hash[WEBSERVER_CONFIG_PARAMS.map { |k| [k, o[k]] }].reject { |_k, v| v.nil? } end end end diff --git a/spec/unit/recipes/configure_spec.rb b/spec/unit/recipes/configure_spec.rb index a19e8a52..40823a0b 100644 --- a/spec/unit/recipes/configure_spec.rb +++ b/spec/unit/recipes/configure_spec.rb @@ -879,6 +879,10 @@ deploy['dummy_project']['appserver']['max_pool_size'] = 10 deploy['dummy_project']['appserver']['min_instances'] = 5 deploy['dummy_project']['appserver']['mount_point'] = '/some/mount/point' + deploy['dummy_project']['appserver']['pool_idle_time'] = 300 + deploy['dummy_project']['appserver']['max_request_queue_size'] = 100 + deploy['dummy_project']['appserver']['error_document'] = { "503": '503.html', "504": '504.html' } + deploy['dummy_project']['appserver']['passenger_max_preloader_idle_time'] = 300 deploy['dummy_project']['webserver']['adapter'] = 'apache2' deploy['dummy_project']['global']['environment'] = 'production' solo_node.set['deploy'] = deploy @@ -927,6 +931,20 @@ expect(chef_run) .to render_file("/etc/apache2/sites-available/#{aws_opsworks_app['shortname']}.conf") .with_content('PassengerMinInstances 5') + expect(chef_run) + .to render_file("/etc/apache2/sites-available/#{aws_opsworks_app['shortname']}.conf") + .with_content('PoolIdleTime 300') + expect(chef_run) + .to render_file("/etc/apache2/sites-available/#{aws_opsworks_app['shortname']}.conf") + .with_content('MaxRequestQueueSize 100') + expect(chef_run) + .to render_file("/etc/apache2/sites-available/#{aws_opsworks_app['shortname']}.conf") + .with_content('PassengerErrorOverride on') + .with_content('ErrorDocument 503 /503.html') + .with_content('ErrorDocument 504 /504.html') + expect(chef_run) + .to render_file("/etc/apache2/sites-available/#{aws_opsworks_app['shortname']}.conf") + .with_content('PassengerMaxPreloaderIdleTime 300') expect(chef_run) .to render_file("/etc/apache2/sites-available/#{aws_opsworks_app['shortname']}.conf") expect(chef_run) diff --git a/templates/default/appserver.apache2.passenger.conf.erb b/templates/default/appserver.apache2.passenger.conf.erb index f199af6f..d8b1a840 100644 --- a/templates/default/appserver.apache2.passenger.conf.erb +++ b/templates/default/appserver.apache2.passenger.conf.erb @@ -55,6 +55,15 @@ Header always unset "X-Powered-By" <% if @appserver_config[:min_instances] -%> PassengerMinInstances <%= @appserver_config[:min_instances] %> <% end %> +<% if @appserver_config[:pool_idle_time] -%> + PassengerPoolIdleTime <%= @appserver_config[:pool_idle_time] %> +<% end %> +<% if @appserver_config[:max_request_queue_size] -%> + PassengerMaxRequestQueueSize <%= @appserver_config[:max_request_queue_size] %> +<% end %> +<% if @appserver_config[:passenger_max_preloader_idle_time] -%> + PassengerMaxPreloaderIdleTime <%= @appserver_config[:passenger_max_preloader_idle_time] %> +<% end %> > PassengerAppEnv <%= @deploy_env %> @@ -63,6 +72,13 @@ Header always unset "X-Powered-By" RewriteEngine on + + <% if @appserver_config[:error_document] -%> + PassengerErrorOverride on + <% @appserver_config[:error_document].each do | status, file | %> + ErrorDocument <%= status %> /<%= file %> + <% end %> + <% end %> <% end %> <%= @out[:extra_config] %> @@ -138,6 +154,15 @@ SSLStaplingCache "shmcb:logs/stapling-cache(150000)" <% if @appserver_config[:min_instances] -%> PassengerMinInstances <%= @appserver_config[:min_instances] %> <% end %> +<% if @appserver_config[:pool_idle_time] -%> + PassengerPoolIdleTime <%= @appserver_config[:pool_idle_time] %> +<% end %> +<% if @appserver_config[:max_request_queue_size] -%> + PassengerMaxRequestQueueSize <%= @appserver_config[:max_request_queue_size] %> +<% end %> +<% if @appserver_config[:passenger_max_preloader_idle_time] -%> + PassengerMaxPreloaderIdleTime <%= @appserver_config[:passenger_max_preloader_idle_time] %> +<% end %> > PassengerAppEnv <%= @deploy_env %> @@ -149,6 +174,13 @@ SSLStaplingCache "shmcb:logs/stapling-cache(150000)" RewriteEngine on + <% if @appserver_config[:error_document] -%> + PassengerErrorOverride on + <% @appserver_config[:error_document].each do | status, file | %> + ErrorDocument <%= status %> /<%= file %> + <% end %> + <% end %> + <%= @out[:extra_config_ssl] %>