EY::Serverside::Adapter ======================= This library provides an interface bound to the same version of engineyard-serverside. It tries very hard to throw an exception whenever the caller does anything wrong. The benefit of this is that you can depend on a newer version of engineyard-serverside-adapter and run your tests; if they pass, you can be fairly confident that your code will work with the newer version of engineyard-serverside. engineyard-serverside-adapter provides you with a builder to describe a cluster, and yields commands to the block you pass. Because it knows nothing about how to connect to a server, only what commands to run, it can be used anywhere where interaction with engineyard-serverside is needed. Example ------- This example is adapted from the engineyard gem: require 'engineyard-serverside-adapter' def adapter(app, verbose) EY::Serverside::Adapter.new("/usr/local/ey_resin/ruby/bin") do |args| args.app = app.name args.git = app.repository_uri args.instances = environment.instances.map { |i| {:hostname => i.public_hostname, :roles => [i.role], :name => i.name} } args.verbose = verbose || ENV['DEBUG'] args.stack = environment.stack_name args.framework_env = environment.framework_env end end private :adapter def deploy(app, ref, migration_command=nil, extra_configuration=nil, verbose=false) deploy_command = adapter(app, verbose).deploy do |args| args.config = extra_configuration if extra_configuration # anything that can be to_json'd args.migrate = migration_command if migration_command args.ref = ref end deploy_command.call { |command| app_master.ssh(command) } end You can set up args in Adapter.new, in Adapter#deploy (#rollback, #restart, etc.), or in both. A good idea is to set up common args (e.g. app, instances) in Adapter.new and then supply deploy-specific args to Adapter#deploy. We hope this lets your code stay DRY while also avoiding unnecessary work from generating unnecessary args. Releasing --------- Bump the version in lib/engineyard-serverside-adapter/version.rb, commit it, and then run $ rake release This will tag and push for you. The engineyard gem depends on this gem to talk to the server side deploy mechanism. Update the version of engineyard-serverside-adapter in engineyard's Gemfile to interact with a new version of engineyard-serverside.