Capistrano::Template
A capistrano 3 plugin that aids in rendering erb templates and
uploads the content to the server if the file does not exists at
the remote host or the content did change.
Installation
Add this line to your application's Gemfile:
gem 'capistrano-template'
And then execute:
$ bundle
Or install it yourself as:
$ gem install capistrano-template
Usage example
In your Capfile:
require 'capistrano/capistrano_plugin_template'
In your task or stage file:
desc 'Upload a rendered erb-template'
task :setup do
on roles :all do
template 'assets.host.site', locals: { 'local1' => 'value local 1'}
end
on roles :all do
template 'other.template.name', '~/execute_some_thing.sh', 0750, 'deployer', 'www-run' ,locals: { 'local1' => 'value local 1'}
end
end
In your config/deploy/templates/shared/assets.host.site.erb
server {
listen 80;
client_max_body_size 4G;
keepalive_timeout 10;
error_page 500 502 504 /500.html;
error_page 503 @503;
server_name <%= host.properties.fetch(:host_server_name) %>;
root <%= remote_path_for(current_path) %>/public;
<%= render 'partial.conf', indent: 2, locals: { 'other_local' => 'other local value' } %>
location ^~ /assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
if ($request_filename ~* ^.*?\.(eot)|(ttf)|(woff)|(svg)|(otf)$){
add_header Access-Control-Allow-Origin *;
}
}
location = /50x.html {
root html;
}
location = /404.html {
root html;
}
if ($request_method !~ ^(GET|HEAD|PUT|POST|DELETE|OPTIONS)$ ){
return 405;
}
if (-f $document_root/system/maintenance.html) {
return 503;
}
location ~ \.(php|html)$ {
return 405;
}
}
Settings
This settings can be changed in your Capfile, deploy.rb or stage file.
Variable | Default | Description |
---|
templating_digster | ->(data){ OpenSSL::Digest::MD5.hexdigest(data)} | Checksum algorythmous for rendered template to check for remote diffs |
templating_digest_cmd | %Q{test "Z$(openssl md5 %<path>s | sed 's/^.*= *//')" = "Z%<digest>s" } | Remote command to validate a digest. Format placeholders path is replaces by full path to the remote file and digest with the digest calculated in capistrano. |
templating_mode_test_cmd | %Q{ [ "Z$(printf "%%.4o" 0$(stat -c "%%a" %<path>s 2>/dev/null || stat -f "%%A" %<path>s))" != "Z%<mode>s" ] } | Test command to check the remote file permissions. |
templating_user_test_cmd | %Q{ [ "Z$(stat -c "%%U" %<path>s 2>/dev/null)" != "Z%<user>s" ] } | Test command to check the remote file permissions. |
templating_paths | ["config/deploy/templates/#{fetch(:stage)}/%<host>s", "config/deploy/templates/#{fetch(:stage)}", "config/deploy/templates/shared/%<host>s", "config/deploy/templates/shared"] | Folder to look for a template to render. <host> is replaced by the actual host. |
Contributing
- Fork it ( http://github.com/faber-lotto/capistrano-template/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request