deploify 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +18 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +36 -0
- data/LICENSE.txt +22 -0
- data/README.md +2 -0
- data/Rakefile +1 -0
- data/deploify.gemspec +29 -0
- data/lib/deploify/capistrano_extensions.rb +189 -0
- data/lib/deploify/recipes/deploify.rb +171 -0
- data/lib/deploify/recipes/mongodb.rb +15 -0
- data/lib/deploify/recipes/monit.rb +84 -0
- data/lib/deploify/recipes/mysql.rb +85 -0
- data/lib/deploify/recipes/nginx.rb +122 -0
- data/lib/deploify/recipes/passenger.rb +130 -0
- data/lib/deploify/recipes/puma.rb +15 -0
- data/lib/deploify/recipes/rails.rb +221 -0
- data/lib/deploify/recipes/thin.rb +104 -0
- data/lib/deploify/recipes.rb +13 -0
- data/lib/deploify/templates/monit/monit.conf.erb +5 -0
- data/lib/deploify/templates/nginx/logrotate.conf.erb +12 -0
- data/lib/deploify/templates/nginx/vhost_http_force_ssl.conf.erb +79 -0
- data/lib/deploify/templates/nginx/vhost_http_only.conf.erb +66 -0
- data/lib/deploify/templates/nginx/vhost_http_with_ssl.conf.erb +131 -0
- data/lib/deploify/templates/passenger/logrotate.conf.erb +12 -0
- data/lib/deploify/templates/passenger/passengerctl-lib.erb +68 -0
- data/lib/deploify/templates/passenger/passengerctl.erb +10 -0
- data/lib/deploify/templates/thin/logrotate.conf.erb +0 -0
- data/lib/deploify/templates/thin/thinctl-lib.erb +84 -0
- data/lib/deploify/templates/thin/thinctl.erb +9 -0
- data/lib/deploify/version.rb +12 -0
- data/lib/deploify.rb +7 -0
- data/lib/plugins/all.rb +20 -0
- data/lib/plugins/apt.rb +94 -0
- data/lib/plugins/std.rb +203 -0
- metadata +196 -0
| @@ -0,0 +1,79 @@ | |
| 1 | 
            +
            upstream <%= nginx_upstream_name %> {
         | 
| 2 | 
            +
            <% nginx_upstream_servers.each do |srv| -%>
         | 
| 3 | 
            +
              server <%= srv %>;
         | 
| 4 | 
            +
            <% end -%>
         | 
| 5 | 
            +
            }
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            server {
         | 
| 8 | 
            +
              listen <%= nginx_vhost_listen_ip %>:80;
         | 
| 9 | 
            +
              server_name <%= domain %> <%= Array(web_server_aliases).join(' ') %>;
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              location / {
         | 
| 12 | 
            +
                rewrite ^ https://<%= domain %>$request_uri? permanent;
         | 
| 13 | 
            +
              }
         | 
| 14 | 
            +
            }
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            server {
         | 
| 17 | 
            +
              listen <%= nginx_vhost_listen_ip %>:443;
         | 
| 18 | 
            +
              server_name <%= domain %> <%= Array(web_server_aliases).join(' ') %>;
         | 
| 19 | 
            +
              root <%= deploy_to %>/current/public;
         | 
| 20 | 
            +
              client_max_body_size <%= nginx_client_max_body_size %>;
         | 
| 21 | 
            +
              access_log <%= shared_path %>/log/access.log;
         | 
| 22 | 
            +
              error_log <%= shared_path %>/log/error.log;
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              ssl on;
         | 
| 25 | 
            +
              ssl_certificate <%= deploy_to %>/nginx/<%= rails_env %>.crt;
         | 
| 26 | 
            +
              ssl_certificate_key <%= deploy_to %>/nginx/<%= rails_env %>.key;
         | 
| 27 | 
            +
             | 
| 28 | 
            +
              <% if force_domain_with_www -%>
         | 
| 29 | 
            +
              if ($host !~* ^www.<%= domain %>$) {
         | 
| 30 | 
            +
                rewrite ^(.*) https://www.<%= domain %>$1 permanent;
         | 
| 31 | 
            +
              }
         | 
| 32 | 
            +
              <% end -%>
         | 
| 33 | 
            +
             | 
| 34 | 
            +
              location / {
         | 
| 35 | 
            +
                <% if nginx_secured_site -%>
         | 
| 36 | 
            +
                auth_basic "Limited access";
         | 
| 37 | 
            +
                auth_basic_user_file <%= "#{deploy_to}/nginx/.htaccess" %>;
         | 
| 38 | 
            +
                <% end -%>
         | 
| 39 | 
            +
                proxy_pass http://<%= nginx_upstream_name %>;
         | 
| 40 | 
            +
                proxy_redirect off;
         | 
| 41 | 
            +
                proxy_set_header Host $host;
         | 
| 42 | 
            +
                proxy_set_header X-Real-IP $remote_addr;
         | 
| 43 | 
            +
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         | 
| 44 | 
            +
                proxy_set_header X-Forwarded-Proto https;
         | 
| 45 | 
            +
              }
         | 
| 46 | 
            +
             | 
| 47 | 
            +
              # This allows people to use images and css in their maintenance.html file
         | 
| 48 | 
            +
              if ($request_filename ~* \.(css|jpg|gif|png)$) {
         | 
| 49 | 
            +
                break;
         | 
| 50 | 
            +
              }
         | 
| 51 | 
            +
             | 
| 52 | 
            +
              # Rewrite all the requests to the maintenance.html page if it exists.
         | 
| 53 | 
            +
              if (-f $document_root/system/maintenance.html) {
         | 
| 54 | 
            +
                return 503;
         | 
| 55 | 
            +
              }
         | 
| 56 | 
            +
             | 
| 57 | 
            +
              # set Expire header on assets: see http://developer.yahoo.com/performance/rules.html#expires
         | 
| 58 | 
            +
              location ~ ^/(images|javascripts|stylesheets)/ {
         | 
| 59 | 
            +
                expires max;
         | 
| 60 | 
            +
                error_page 404 = @fallback;
         | 
| 61 | 
            +
              }
         | 
| 62 | 
            +
             | 
| 63 | 
            +
              location @fallback {
         | 
| 64 | 
            +
                proxy_pass http://<%= nginx_upstream_name %>;
         | 
| 65 | 
            +
                proxy_redirect off;
         | 
| 66 | 
            +
                proxy_set_header Host $host;
         | 
| 67 | 
            +
                proxy_set_header X-Real-IP $remote_addr;
         | 
| 68 | 
            +
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         | 
| 69 | 
            +
                proxy_set_header X-Forwarded-Proto https;
         | 
| 70 | 
            +
              }
         | 
| 71 | 
            +
             | 
| 72 | 
            +
              error_page 404 /404.html;
         | 
| 73 | 
            +
              error_page 500 502 504 /500.html;
         | 
| 74 | 
            +
             | 
| 75 | 
            +
              error_page 503 @503;
         | 
| 76 | 
            +
              location @503 {
         | 
| 77 | 
            +
                rewrite  ^(.*)$ /system/maintenance.html break;
         | 
| 78 | 
            +
              }
         | 
| 79 | 
            +
            }
         | 
| @@ -0,0 +1,66 @@ | |
| 1 | 
            +
            upstream <%= nginx_upstream_name %> {
         | 
| 2 | 
            +
            <% nginx_upstream_servers.each do |srv| -%>
         | 
| 3 | 
            +
              server <%= srv %>;
         | 
| 4 | 
            +
            <% end -%>
         | 
| 5 | 
            +
            }
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            server {
         | 
| 8 | 
            +
              listen <%= nginx_vhost_listen_ip %>:80;
         | 
| 9 | 
            +
              server_name <%= domain %> <%= Array(web_server_aliases).join(' ') %>;
         | 
| 10 | 
            +
              root <%= deploy_to %>/current/public;
         | 
| 11 | 
            +
              client_max_body_size <%= nginx_client_max_body_size %>;
         | 
| 12 | 
            +
              access_log <%= shared_path %>/log/access.log;
         | 
| 13 | 
            +
              error_log <%= shared_path %>/log/error.log;
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              <% if force_domain_with_www -%>
         | 
| 16 | 
            +
              if ($host !~* ^www.<%= domain %>$) {
         | 
| 17 | 
            +
                rewrite ^(.*) http://www.<%= domain %>$1 permanent;
         | 
| 18 | 
            +
              }
         | 
| 19 | 
            +
              <% end -%>
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              location / {
         | 
| 22 | 
            +
                <% if nginx_secured_site -%>
         | 
| 23 | 
            +
                auth_basic "Limited access";
         | 
| 24 | 
            +
                auth_basic_user_file <%= "#{deploy_to}/nginx/.htaccess" %>;
         | 
| 25 | 
            +
                <% end -%>
         | 
| 26 | 
            +
                proxy_pass http://<%= nginx_upstream_name %>;
         | 
| 27 | 
            +
                proxy_redirect off;
         | 
| 28 | 
            +
                proxy_set_header Host $host;
         | 
| 29 | 
            +
                proxy_set_header X-Real-IP $remote_addr;
         | 
| 30 | 
            +
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         | 
| 31 | 
            +
                proxy_set_header X-Forwarded-Proto http;
         | 
| 32 | 
            +
              }
         | 
| 33 | 
            +
             | 
| 34 | 
            +
              # This allows people to use images and css in their maintenance.html file
         | 
| 35 | 
            +
              if ($request_filename ~* \.(css|jpg|gif|png)$) {
         | 
| 36 | 
            +
                break;
         | 
| 37 | 
            +
              }
         | 
| 38 | 
            +
             | 
| 39 | 
            +
              # Rewrite all the requests to the maintenance.html page if it exists.
         | 
| 40 | 
            +
              if (-f $document_root/system/maintenance.html) {
         | 
| 41 | 
            +
                return 503;
         | 
| 42 | 
            +
              }
         | 
| 43 | 
            +
             | 
| 44 | 
            +
              # set Expire header on assets: see http://developer.yahoo.com/performance/rules.html#expires
         | 
| 45 | 
            +
              location ~ ^/(images|javascripts|stylesheets)/ {
         | 
| 46 | 
            +
                expires max;
         | 
| 47 | 
            +
                error_page 404 = @fallback;
         | 
| 48 | 
            +
              }
         | 
| 49 | 
            +
             | 
| 50 | 
            +
              location @fallback {
         | 
| 51 | 
            +
                proxy_pass http://<%= nginx_upstream_name %>;
         | 
| 52 | 
            +
                proxy_redirect off;
         | 
| 53 | 
            +
                proxy_set_header Host $host;
         | 
| 54 | 
            +
                proxy_set_header X-Real-IP $remote_addr;
         | 
| 55 | 
            +
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         | 
| 56 | 
            +
                proxy_set_header X-Forwarded-Proto http;
         | 
| 57 | 
            +
              }
         | 
| 58 | 
            +
             | 
| 59 | 
            +
              error_page 404 /404.html;
         | 
| 60 | 
            +
              error_page 500 502 504 /500.html;
         | 
| 61 | 
            +
             | 
| 62 | 
            +
              error_page 503 @503;
         | 
| 63 | 
            +
              location @503 {
         | 
| 64 | 
            +
                rewrite  ^(.*)$ /system/maintenance.html break;
         | 
| 65 | 
            +
              }
         | 
| 66 | 
            +
            }
         | 
| @@ -0,0 +1,131 @@ | |
| 1 | 
            +
            upstream <%= nginx_upstream_name %> {
         | 
| 2 | 
            +
            <% nginx_upstream_servers.each do |srv| -%>
         | 
| 3 | 
            +
              server <%= srv %>;
         | 
| 4 | 
            +
            <% end -%>
         | 
| 5 | 
            +
            }
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            server {
         | 
| 8 | 
            +
              listen <%= nginx_vhost_listen_ip %>:80;
         | 
| 9 | 
            +
              server_name <%= domain %> <%= Array(web_server_aliases).join(' ') %>;
         | 
| 10 | 
            +
              root <%= deploy_to %>/current/public;
         | 
| 11 | 
            +
              client_max_body_size <%= nginx_client_max_body_size %>;
         | 
| 12 | 
            +
              access_log <%= shared_path %>/log/access.log;
         | 
| 13 | 
            +
              error_log <%= shared_path %>/log/error.log;
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              <% if force_domain_with_www -%>
         | 
| 16 | 
            +
              if ($host !~* ^www.<%= domain %>$) {
         | 
| 17 | 
            +
                rewrite ^(.*) http://www.<%= domain %>$1 permanent;
         | 
| 18 | 
            +
              }
         | 
| 19 | 
            +
              <% end -%>
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              location / {
         | 
| 22 | 
            +
                <% if nginx_secured_site -%>
         | 
| 23 | 
            +
                auth_basic "Limited access";
         | 
| 24 | 
            +
                auth_basic_user_file <%= "#{deploy_to}/nginx/.htaccess" %>;
         | 
| 25 | 
            +
                <% end -%>
         | 
| 26 | 
            +
                proxy_pass http://<%= nginx_upstream_name %>;
         | 
| 27 | 
            +
                proxy_redirect off;
         | 
| 28 | 
            +
                proxy_set_header Host $host;
         | 
| 29 | 
            +
                proxy_set_header X-Real-IP $remote_addr;
         | 
| 30 | 
            +
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         | 
| 31 | 
            +
                proxy_set_header X-Forwarded-Proto http;
         | 
| 32 | 
            +
              }
         | 
| 33 | 
            +
             | 
| 34 | 
            +
              # This allows people to use images and css in their maintenance.html file
         | 
| 35 | 
            +
              if ($request_filename ~* \.(css|jpg|gif|png)$) {
         | 
| 36 | 
            +
                break;
         | 
| 37 | 
            +
              }
         | 
| 38 | 
            +
             | 
| 39 | 
            +
              # Rewrite all the requests to the maintenance.html page if it exists.
         | 
| 40 | 
            +
              if (-f $document_root/system/maintenance.html) {
         | 
| 41 | 
            +
                return 503;
         | 
| 42 | 
            +
              }
         | 
| 43 | 
            +
             | 
| 44 | 
            +
              # set Expire header on assets: see http://developer.yahoo.com/performance/rules.html#expires
         | 
| 45 | 
            +
              location ~ ^/(images|javascripts|stylesheets)/ {
         | 
| 46 | 
            +
                expires max;
         | 
| 47 | 
            +
                error_page 404 = @fallback;
         | 
| 48 | 
            +
              }
         | 
| 49 | 
            +
             | 
| 50 | 
            +
              location @fallback {
         | 
| 51 | 
            +
                proxy_pass http://<%= nginx_upstream_name %>;
         | 
| 52 | 
            +
                proxy_redirect off;
         | 
| 53 | 
            +
                proxy_set_header Host $host;
         | 
| 54 | 
            +
                proxy_set_header X-Real-IP $remote_addr;
         | 
| 55 | 
            +
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         | 
| 56 | 
            +
                proxy_set_header X-Forwarded-Proto http;
         | 
| 57 | 
            +
              }
         | 
| 58 | 
            +
             | 
| 59 | 
            +
              error_page 404 /404.html;
         | 
| 60 | 
            +
              error_page 500 502 504 /500.html;
         | 
| 61 | 
            +
             | 
| 62 | 
            +
              error_page 503 @503;
         | 
| 63 | 
            +
              location @503 {
         | 
| 64 | 
            +
                rewrite  ^(.*)$ /system/maintenance.html break;
         | 
| 65 | 
            +
              }
         | 
| 66 | 
            +
            }
         | 
| 67 | 
            +
             | 
| 68 | 
            +
            server {
         | 
| 69 | 
            +
              listen <%= nginx_vhost_listen_ip %>:443;
         | 
| 70 | 
            +
              server_name <%= domain %> <%= Array(web_server_aliases).join(' ') %>;
         | 
| 71 | 
            +
              root <%= deploy_to %>/current/public;
         | 
| 72 | 
            +
              client_max_body_size <%= nginx_client_max_body_size %>;
         | 
| 73 | 
            +
              access_log <%= shared_path %>/log/access.log;
         | 
| 74 | 
            +
              error_log <%= shared_path %>/log/error.log;
         | 
| 75 | 
            +
             | 
| 76 | 
            +
              ssl on;
         | 
| 77 | 
            +
              ssl_certificate <%= deploy_to %>/nginx/<%= rails_env %>.crt;
         | 
| 78 | 
            +
              ssl_certificate_key <%= deploy_to %>/nginx/<%= rails_env %>.key;
         | 
| 79 | 
            +
             | 
| 80 | 
            +
              <% if force_domain_with_www -%>
         | 
| 81 | 
            +
              if ($host !~* ^www.<%= domain %>$) {
         | 
| 82 | 
            +
                rewrite ^(.*) https://www.<%= domain %>$1 permanent;
         | 
| 83 | 
            +
              }
         | 
| 84 | 
            +
              <% end -%>
         | 
| 85 | 
            +
             | 
| 86 | 
            +
              location / {
         | 
| 87 | 
            +
                <% if nginx_secured_site -%>
         | 
| 88 | 
            +
                auth_basic "Limited access";
         | 
| 89 | 
            +
                auth_basic_user_file <%= "#{deploy_to}/nginx/.htaccess" %>;
         | 
| 90 | 
            +
                <% end -%>
         | 
| 91 | 
            +
                proxy_pass http://<%= nginx_upstream_name %>;
         | 
| 92 | 
            +
                proxy_redirect off;
         | 
| 93 | 
            +
                proxy_set_header Host $host;
         | 
| 94 | 
            +
                proxy_set_header X-Real-IP $remote_addr;
         | 
| 95 | 
            +
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         | 
| 96 | 
            +
                proxy_set_header X-Forwarded-Proto https;
         | 
| 97 | 
            +
              }
         | 
| 98 | 
            +
             | 
| 99 | 
            +
              # This allows people to use images and css in their maintenance.html file
         | 
| 100 | 
            +
              if ($request_filename ~* \.(css|jpg|gif|png)$) {
         | 
| 101 | 
            +
                break;
         | 
| 102 | 
            +
              }
         | 
| 103 | 
            +
             | 
| 104 | 
            +
              # Rewrite all the requests to the maintenance.html page if it exists.
         | 
| 105 | 
            +
              if (-f $document_root/system/maintenance.html) {
         | 
| 106 | 
            +
                return 503;
         | 
| 107 | 
            +
              }
         | 
| 108 | 
            +
             | 
| 109 | 
            +
              # set Expire header on assets: see http://developer.yahoo.com/performance/rules.html#expires
         | 
| 110 | 
            +
              location ~ ^/(images|javascripts|stylesheets)/ {
         | 
| 111 | 
            +
                expires max;
         | 
| 112 | 
            +
                error_page 404 = @fallback;
         | 
| 113 | 
            +
              }
         | 
| 114 | 
            +
             | 
| 115 | 
            +
              location @fallback {
         | 
| 116 | 
            +
                proxy_pass http://<%= nginx_upstream_name %>;
         | 
| 117 | 
            +
                proxy_redirect off;
         | 
| 118 | 
            +
                proxy_set_header Host $host;
         | 
| 119 | 
            +
                proxy_set_header X-Real-IP $remote_addr;
         | 
| 120 | 
            +
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         | 
| 121 | 
            +
                proxy_set_header X-Forwarded-Proto https;
         | 
| 122 | 
            +
              }
         | 
| 123 | 
            +
             | 
| 124 | 
            +
              error_page 404 /404.html;
         | 
| 125 | 
            +
              error_page 500 502 504 /500.html;
         | 
| 126 | 
            +
             | 
| 127 | 
            +
              error_page 503 @503;
         | 
| 128 | 
            +
              location @503 {
         | 
| 129 | 
            +
                rewrite  ^(.*)$ /system/maintenance.html break;
         | 
| 130 | 
            +
              }
         | 
| 131 | 
            +
            }
         | 
| @@ -0,0 +1,68 @@ | |
| 1 | 
            +
            USER=app_${APPLICATION}
         | 
| 2 | 
            +
            APP_DIR=/var/www/${APPLICATION}/current
         | 
| 3 | 
            +
            PIDFILE=${APP_DIR}/tmp/pids/passenger.pid
         | 
| 4 | 
            +
            LOGFILE=${APP_DIR}/log/passenger.log
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            if [ "$APP_PORT" = "" ]; then
         | 
| 7 | 
            +
              CMD_START="cd $APP_DIR; rvm use $RVM_RUBY; passenger start $APP_DIR --socket ${APP_DIR}/tmp/pids/passenger.sock -e $ENVIRONMENT --min-instances=$INSTANCES_MIN --max-pool-size=$INSTANCES_MAX --pid-file $PIDFILE --log-file $LOGFILE -d"
         | 
| 8 | 
            +
              CMD_STOP="cd $APP_DIR; rvm use $RVM_RUBY; passenger stop $APP_DIR --pid-file $PIDFILE"
         | 
| 9 | 
            +
            else
         | 
| 10 | 
            +
              CMD_START="cd $APP_DIR; rvm use $RVM_RUBY; passenger start $APP_DIR --port $APP_PORT -e $ENVIRONMENT --min-instances=$INSTANCES_MIN --max-pool-size=$INSTANCES_MAX --pid-file $PIDFILE --log-file $LOGFILE -d"
         | 
| 11 | 
            +
              CMD_STOP="cd $APP_DIR; rvm use $RVM_RUBY; passenger stop $APP_DIR --pid-file $PIDFILE"
         | 
| 12 | 
            +
            fi
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            function start() {
         | 
| 15 | 
            +
              echo "Starting passenger for application '${APPLICATION}'"
         | 
| 16 | 
            +
              if [ -f ${PIDFILE} ]; then
         | 
| 17 | 
            +
                kill -0 `cat ${PIDFILE}`
         | 
| 18 | 
            +
                if [ "$?" == "1" ]; then
         | 
| 19 | 
            +
                  rm ${APP_DIR}/tmp/pids/passenger.*
         | 
| 20 | 
            +
                else
         | 
| 21 | 
            +
                  echo "Passenger already running with PID "`cat ${PIDFILE}`
         | 
| 22 | 
            +
                  return 1
         | 
| 23 | 
            +
                fi
         | 
| 24 | 
            +
              fi
         | 
| 25 | 
            +
              su - $USER -c "$CMD_START"
         | 
| 26 | 
            +
            }
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            function stop() {
         | 
| 29 | 
            +
              echo "Stopping passenger for application '${APPLICATION}'"
         | 
| 30 | 
            +
              su - $USER -c "$CMD_STOP"
         | 
| 31 | 
            +
            }
         | 
| 32 | 
            +
             | 
| 33 | 
            +
            function graceful() {
         | 
| 34 | 
            +
              echo "Graceful (if possible) restart for application '${APPLICATION}'"
         | 
| 35 | 
            +
              if [ -f ${PIDFILE} ]; then
         | 
| 36 | 
            +
                kill -0 `cat ${PIDFILE}`
         | 
| 37 | 
            +
                if [ "$?" == "0" ]; then
         | 
| 38 | 
            +
                  echo "Graceful restart for application '${APPLICATION}'"
         | 
| 39 | 
            +
                  touch ${APP_DIR}/tmp/restart.txt
         | 
| 40 | 
            +
                  return 0
         | 
| 41 | 
            +
                else
         | 
| 42 | 
            +
                  echo "Oops! Pid File exists, but not workers. Restarting."
         | 
| 43 | 
            +
                  start
         | 
| 44 | 
            +
                fi
         | 
| 45 | 
            +
              else
         | 
| 46 | 
            +
                start
         | 
| 47 | 
            +
              fi
         | 
| 48 | 
            +
            }
         | 
| 49 | 
            +
             | 
| 50 | 
            +
            case "$1" in
         | 
| 51 | 
            +
              "start")
         | 
| 52 | 
            +
                start
         | 
| 53 | 
            +
                ;;
         | 
| 54 | 
            +
              "stop")
         | 
| 55 | 
            +
                stop
         | 
| 56 | 
            +
                ;;
         | 
| 57 | 
            +
              "restart")
         | 
| 58 | 
            +
                stop
         | 
| 59 | 
            +
                start
         | 
| 60 | 
            +
                ;;
         | 
| 61 | 
            +
              "graceful")
         | 
| 62 | 
            +
                graceful
         | 
| 63 | 
            +
                ;;
         | 
| 64 | 
            +
              *)
         | 
| 65 | 
            +
                echo "Usage: $0 start|stop|restart|graceful" >&2
         | 
| 66 | 
            +
                exit 3
         | 
| 67 | 
            +
                ;;
         | 
| 68 | 
            +
            esac
         | 
| @@ -0,0 +1,10 @@ | |
| 1 | 
            +
            #!/bin/bash
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            APPLICATION=<%= application %>
         | 
| 4 | 
            +
            APP_PORT=<%= passenger_port %>
         | 
| 5 | 
            +
            RVM_RUBY=<%= rvm_ruby_string %>
         | 
| 6 | 
            +
            ENVIRONMENT=<%= rails_env %>
         | 
| 7 | 
            +
            INSTANCES_MIN=<%= passenger_min_instances %>
         | 
| 8 | 
            +
            INSTANCES_MAX=<%= passenger_max_pool_size %>
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            source /usr/local/lib/passengerctl $1
         | 
| 
            File without changes
         | 
| @@ -0,0 +1,84 @@ | |
| 1 | 
            +
            USER=app_${APPLICATION}
         | 
| 2 | 
            +
            APP_DIR=<%= thin_applications_dir %>/${APPLICATION}/current
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            if [ "${APP_PORT}" = "" ]; then
         | 
| 5 | 
            +
              CMD_START="cd ${APP_DIR}; rvm use ${RVM_RUBY}; NOEXEC_DISABLE=1 thin start -s ${THIN_SERVERS} -S tmp/pids/thin.sock -e ${ENVIRONMENT} --stats /thin-status -d"
         | 
| 6 | 
            +
              CMD_RESTART="cd ${APP_DIR}; rvm use ${RVM_RUBY}; NOEXEC_DISABLE=1 thin restart -s ${THIN_SERVERS} -S tmp/pids/thin.sock -e ${ENVIRONMENT} --stats /thin-status -d"
         | 
| 7 | 
            +
            else
         | 
| 8 | 
            +
              CMD_START="cd ${APP_DIR}; rvm use ${RVM_RUBY}; NOEXEC_DISABLE=1 thin start -s ${THIN_SERVERS} -p ${APP_PORT} -e ${ENVIRONMENT} --stats /thin-status -d"
         | 
| 9 | 
            +
              CMD_RESTART="cd ${APP_DIR}; rvm use ${RVM_RUBY}; NOEXEC_DISABLE=1 thin restart -s ${THIN_SERVERS} -p ${APP_PORT} -e ${ENVIRONMENT} --stats /thin-status -d"
         | 
| 10 | 
            +
            fi
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            function running_servers() {
         | 
| 13 | 
            +
              return `ls -1 ${APP_DIR}/tmp/pids/thin.*.pid | wc -l`
         | 
| 14 | 
            +
            }
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            function start() {
         | 
| 17 | 
            +
              echo "Starting thin cluster for application '${APPLICATION}'"
         | 
| 18 | 
            +
              # if [ -f ${PIDFILE} ]; then
         | 
| 19 | 
            +
              #   kill -0 `cat ${PIDFILE}`
         | 
| 20 | 
            +
              #   if [ "$?" == "1" ]; then
         | 
| 21 | 
            +
              #     rm ${APP_DIR}/tmp/pids/thin.*
         | 
| 22 | 
            +
              #   else
         | 
| 23 | 
            +
              #     echo "Thin cluster already running with PID "`cat ${PIDFILE}`
         | 
| 24 | 
            +
              #     return 1
         | 
| 25 | 
            +
              #   fi
         | 
| 26 | 
            +
              # fi
         | 
| 27 | 
            +
              su - $USER -c "${CMD_START}"
         | 
| 28 | 
            +
            }
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            function stop() {
         | 
| 31 | 
            +
              echo "Stopping thin cluster for application '${APPLICATION}'"
         | 
| 32 | 
            +
              if [ "${APP_PORT}" == '' ]; then
         | 
| 33 | 
            +
                running_servers
         | 
| 34 | 
            +
                CMD_STOP="cd ${APP_DIR}; rvm use ${RVM_RUBY}; NOEXEC_DISABLE=1 thin stop -s $? -S tmp/pids/thin.sock"
         | 
| 35 | 
            +
              else
         | 
| 36 | 
            +
                running_servers
         | 
| 37 | 
            +
                CMD_STOP="cd ${APP_DIR}; rvm use ${RVM_RUBY}; NOEXEC_DISABLE=1 thin stop -s $? -p ${APP_PORT}"
         | 
| 38 | 
            +
              fi
         | 
| 39 | 
            +
              su - $USER -c "${CMD_STOP}"
         | 
| 40 | 
            +
            }
         | 
| 41 | 
            +
             | 
| 42 | 
            +
            function restart() {
         | 
| 43 | 
            +
              echo "Restarting thin cluster for application '${APPLICATION}'"
         | 
| 44 | 
            +
              running_servers
         | 
| 45 | 
            +
              if [ ${THIN_SERVERS} -eq $? ]; then
         | 
| 46 | 
            +
                echo "RESTART"
         | 
| 47 | 
            +
                echo ${CMD_RESTART}
         | 
| 48 | 
            +
                su - $USER -c "${CMD_RESTART}"
         | 
| 49 | 
            +
              else
         | 
| 50 | 
            +
                echo "STOP/START"
         | 
| 51 | 
            +
                stop
         | 
| 52 | 
            +
                start
         | 
| 53 | 
            +
              fi
         | 
| 54 | 
            +
            }
         | 
| 55 | 
            +
             | 
| 56 | 
            +
            function graceful() {
         | 
| 57 | 
            +
              echo "Restarting thin cluster for application '${APPLICATION}' with one-by-one option"
         | 
| 58 | 
            +
              running_servers
         | 
| 59 | 
            +
              if [ ${THIN_SERVERS} -eq $? ]; then
         | 
| 60 | 
            +
                su - $USER -c "${CMD_RESTART} -O -w 20"
         | 
| 61 | 
            +
              else
         | 
| 62 | 
            +
                stop
         | 
| 63 | 
            +
                start
         | 
| 64 | 
            +
              fi
         | 
| 65 | 
            +
            }
         | 
| 66 | 
            +
             | 
| 67 | 
            +
            case "$1" in
         | 
| 68 | 
            +
              "start")
         | 
| 69 | 
            +
                start
         | 
| 70 | 
            +
                ;;
         | 
| 71 | 
            +
              "stop")
         | 
| 72 | 
            +
                stop
         | 
| 73 | 
            +
                ;;
         | 
| 74 | 
            +
              "restart")
         | 
| 75 | 
            +
                restart
         | 
| 76 | 
            +
                ;;
         | 
| 77 | 
            +
              "graceful")
         | 
| 78 | 
            +
                graceful
         | 
| 79 | 
            +
                ;;
         | 
| 80 | 
            +
              *)
         | 
| 81 | 
            +
                echo "Usage: $0 start|stop|restart|graceful" >&2
         | 
| 82 | 
            +
                exit 3
         | 
| 83 | 
            +
                ;;
         | 
| 84 | 
            +
            esac
         | 
    
        data/lib/deploify.rb
    ADDED
    
    | @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            unless Capistrano::Configuration.respond_to?(:instance)
         | 
| 2 | 
            +
              abort "Deploify requires Capistrano ~> 2.13.3"
         | 
| 3 | 
            +
            end
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            require "#{File.dirname(__FILE__)}/deploify/capistrano_extensions"
         | 
| 6 | 
            +
            require "#{File.dirname(__FILE__)}/plugins/all"
         | 
| 7 | 
            +
            require "#{File.dirname(__FILE__)}/deploify/recipes"
         | 
    
        data/lib/plugins/all.rb
    ADDED
    
    | @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            # =all.rb: Load all the Capistrano Plugins in the directory.
         | 
| 2 | 
            +
            #
         | 
| 3 | 
            +
            # Require all other ruby files in the directory.
         | 
| 4 | 
            +
            #
         | 
| 5 | 
            +
            # ----
         | 
| 6 | 
            +
            # Copyright (c) 2007 Neil Wilson, Aldur Systems Ltd
         | 
| 7 | 
            +
            #
         | 
| 8 | 
            +
            # Licensed under the GNU Public License v2. No warranty is provided.
         | 
| 9 | 
            +
            # ----
         | 
| 10 | 
            +
            # = Usage
         | 
| 11 | 
            +
            #
         | 
| 12 | 
            +
            #     require 'vmbuilder_plugins/all'
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            # Splitting and joining __FILE__ deals with the current directory case
         | 
| 15 | 
            +
            # properly
         | 
| 16 | 
            +
            Dir[File.join( File.dirname(__FILE__), '*.rb')].each do |plugin_name|
         | 
| 17 | 
            +
              unless plugin_name == File.join(File.dirname(__FILE__), File.basename(__FILE__))
         | 
| 18 | 
            +
                require plugin_name
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
            end
         | 
    
        data/lib/plugins/apt.rb
    ADDED
    
    | @@ -0,0 +1,94 @@ | |
| 1 | 
            +
            # =apt.rb: Debian 'apt' Installer library
         | 
| 2 | 
            +
            # Capistrano plugin module to install and manage apt packages
         | 
| 3 | 
            +
            #
         | 
| 4 | 
            +
            # ----
         | 
| 5 | 
            +
            # Copyright (c) 2007 Neil Wilson, Aldur Systems Ltd
         | 
| 6 | 
            +
            #
         | 
| 7 | 
            +
            # Licensed under the GNU Public License v2. No warranty is provided.
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            require 'capistrano'
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            # = Purpose
         | 
| 12 | 
            +
            # Apt is a Capistrano plugin module providing a set of methods
         | 
| 13 | 
            +
            # that invoke the *apt* package manager (as used in Debian and Ubuntu)
         | 
| 14 | 
            +
            #
         | 
| 15 | 
            +
            # Installs within Capistrano as the plugin _apt_.
         | 
| 16 | 
            +
            #
         | 
| 17 | 
            +
            # =Usage
         | 
| 18 | 
            +
            #
         | 
| 19 | 
            +
            #    require 'vmbuilder_plugins/apt'
         | 
| 20 | 
            +
            #
         | 
| 21 | 
            +
            # Prefix all calls to the library with <tt>apt.</tt>
         | 
| 22 | 
            +
            #
         | 
| 23 | 
            +
            module Apt
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              # Default apt-get command - reduces any interactivity to the minimum.
         | 
| 26 | 
            +
              APT_GET="DEBCONF_TERSE='yes' DEBIAN_PRIORITY='critical' DEBIAN_FRONTEND=noninteractive apt-get"
         | 
| 27 | 
            +
             | 
| 28 | 
            +
              # Run the apt install program across the package list in 'packages'.
         | 
| 29 | 
            +
              # Select those packages referenced by <tt>:base</tt> and the +version+
         | 
| 30 | 
            +
              # of the distribution you want to use.
         | 
| 31 | 
            +
              def install(packages, version, options={})
         | 
| 32 | 
            +
                update
         | 
| 33 | 
            +
                special_options="--allow-unauthenticated" if version != :stable
         | 
| 34 | 
            +
                send(run_method, %{
         | 
| 35 | 
            +
                  sh -c "#{APT_GET} -qyu --force-yes #{special_options.to_s} install #{package_list(packages, version)}"
         | 
| 36 | 
            +
                }, options)
         | 
| 37 | 
            +
              end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
              # Run an apt clean
         | 
| 40 | 
            +
              def clean(options={})
         | 
| 41 | 
            +
                send(run_method, %{sh -c "#{APT_GET} -qy clean"}, options)
         | 
| 42 | 
            +
              end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
              # Run an apt autoclean
         | 
| 45 | 
            +
              def autoclean(options={})
         | 
| 46 | 
            +
                send(run_method, %{sh -c "#{APT_GET} -qy autoclean"}, options)
         | 
| 47 | 
            +
              end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
              # Run an apt distribution upgrade
         | 
| 50 | 
            +
              def dist_upgrade(options={})
         | 
| 51 | 
            +
                update
         | 
| 52 | 
            +
                send(run_method, %{sh -c "#{APT_GET} -qy dist-upgrade"}, options)
         | 
| 53 | 
            +
              end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
              # Run an apt upgrade. Use dist_upgrade instead if you want to upgrade
         | 
| 56 | 
            +
              # the critical base packages.
         | 
| 57 | 
            +
              def upgrade(options={})
         | 
| 58 | 
            +
                update
         | 
| 59 | 
            +
                send(run_method, %{sh -c "#{APT_GET} -qy upgrade"}, options)
         | 
| 60 | 
            +
              end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
              # Run an apt update.
         | 
| 63 | 
            +
              def update(options={})
         | 
| 64 | 
            +
                send(run_method, %{sh -c "#{APT_GET} -qy update"}, options)
         | 
| 65 | 
            +
              end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
              # RPM package install via alien
         | 
| 68 | 
            +
              def rpm_install(packages, options={})
         | 
| 69 | 
            +
                install({:base => %w(wget alien) }, :base)
         | 
| 70 | 
            +
                send(run_method, "wget -Ncq #{packages.join(' ')}", options)
         | 
| 71 | 
            +
                files=packages.collect { |package| File.basename(package) }
         | 
| 72 | 
            +
                send(run_method, "alien -i #{files.join(' ')}", options)
         | 
| 73 | 
            +
              end
         | 
| 74 | 
            +
             | 
| 75 | 
            +
              # Clear the source list and package cache
         | 
| 76 | 
            +
              def clear_cache(options={})
         | 
| 77 | 
            +
                clean
         | 
| 78 | 
            +
                cmd="rm -f /var/cache/apt/*.bin /var/lib/apt/lists/*_* /var/lib/apt/lists/partial/*"
         | 
| 79 | 
            +
                send(run_method, cmd, options)
         | 
| 80 | 
            +
              end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
            private
         | 
| 83 | 
            +
             | 
| 84 | 
            +
              # Provides a string containing all the package names in the base
         | 
| 85 | 
            +
              #list plus those in +version+.
         | 
| 86 | 
            +
              def package_list(packages, version)
         | 
| 87 | 
            +
                Array(packages[:base]).join(' ') + ' ' + Array(packages[version]).join(' ')
         | 
| 88 | 
            +
              end
         | 
| 89 | 
            +
             | 
| 90 | 
            +
            end
         | 
| 91 | 
            +
             | 
| 92 | 
            +
            Capistrano.plugin :apt, Apt
         | 
| 93 | 
            +
             | 
| 94 | 
            +
            # vim: nowrap sw=2 sts=2 ts=8 ff=unix ft=ruby:
         |