Created
April 19, 2013 14:58
-
-
Save special-k/5420893 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'fileutils' | |
require 'openstack' | |
set :application, "projects_assets" | |
set :assets_root, '/path/to/project' | |
set :repository, "#{assets_root}/public/assets" | |
set :scm, :none # You can set :scm explicitly or Capistrano will make an intelligent guess based on known version control directory names | |
# Or: `accurev`, `bzr`, `cvs`, `darcs`, `git`, `mercurial`, `perforce`, `subversion` or `none` | |
set :deploy_via, :copy | |
set :copy_compression, :gzip | |
before 'deploy:update', 'deploy:assets_precompile', 'deploy:openstack' | |
after 'deploy:create_symlink', 'deploy:assets_clean' | |
#role :web, "your web-server here" # Your HTTP server, Apache/etc | |
role :app, "123.456.789.101" # This may be the same as your `Web` server | |
#role :db, "your primary db-server here", :primary => true # This is where Rails migrations will run | |
#role :db, "your slave db-server here" | |
set :deploy_to, "/path/to/#{application}" | |
set :use_sudo, false | |
default_run_options[:pty] = true | |
namespace :deploy do | |
task :assets_precompile do | |
system "cd #{ assets_root }&&rake assets:precompile" | |
end | |
task :assets_clean do | |
system "cd #{ assets_root }&&rake assets:clean" | |
end | |
task :openstack do | |
os = OpenStack::Connection.create username: 'username', | |
api_key: 'api_key', | |
:auth_url => 'https://auth_url/', | |
:service_type => 'object-store' | |
c = os.get_container( 'assets' ) | |
local_files_list = Dir.entries( repository ).select{|file_name| file_name != '.' && file_name != '..' } | |
remote_files_list = c.objects | |
remote_files_detail = c.objects_detail | |
( remote_files_list - local_files_list ).each{|file_name| | |
c.delete_object file_name | |
remote_files_detail.delete file_name | |
} | |
local_files_list.each{|file_name| | |
full_file_name = "#{ repository }/#{ file_name }" | |
o = if remote_files_detail[file_name].nil? | |
c.create_object file_name | |
else | |
next if remote_files_detail[file_name][:hash] == `md5sum #{full_file_name}`.split(' ')[0] | |
c.get_object file_name | |
end | |
mime_type = if file_name =~ /\.css$/ | |
'text/css; charset=utf-8' | |
elsif file_name =~ /\.js$/ | |
'application/javascript; charset=utf-8' | |
else | |
`file --mime -b #{ full_file_name }`.strip | |
end | |
p [ o.write( File.new(full_file_name), 'content-type' => mime_type ), file_name ] | |
} | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment