https://github.com/srbartlett/elbow/pull/3
Thanks Lee. That was the kick I needed. On Monday, January 13, 2014 2:46:37 PM UTC-6, Lee Hambley wrote: > > I can't see the value of the elastic_load_balancer function, if all it > does it call server. > > You haven't included your module into the main scope, you have included it > into Capistrano::Configuration, where it should, if anywhere be in > Capistrano::DSL. > > To programatically define servers, just call `server()` from anywhere > which has Capistrano::DSL included. > > (I think that's right, anyway, I have't ever actually tried, but the > top-level stuff like release_path and on() and friends all come from the > DSL module being included in to the main scope) > > Lee Hambley > -- > http://lee.hambley.name/ > +49 (0) 170 298 5667 > > > On 13 January 2014 18:31, Michael <[email protected] <javascript:>> wrote: > >> Versions: >> >> - Ruby >> - 2.0.0 >> - Capistrano >> - 3.0.1 >> >> Does any documentation exist for writing capistrano 3 gems for >> programmatically adding servers during deployment? >> >> I can only find Capistrano 2 gems for doing such tasks. ( >> https://github.com/srbartlett/elbow , >> https://github.com/tverbiscer/capistrano-asgroup ) >> >> I'm currently testing this: (The below is a useless example, but should >> try to add '127.0.0.1' to the list of servers...) >> >> root@domU-example:/var/lib/gems/2.0.0/gems/capistrano-autoscale-0.0.1/lib/capistrano# >> >> cat autoscale.rb >> require 'aws-sdk' >> require 'net/dns' >> >> #### The below is old Cap2 syntax... What is the new equivalent? #### >> #Capistrano::Configuration.instance(:must_exist).load do >> ### end old syntax (I think) #### >> >> module Capistrano >> class Configuration >> module ELB >> def elastic_load_balancer(name, *args) >> >> hostname = "127.0.0.1" >> server(hostname, *args) >> end >> >> end >> >> include ELB >> end >> end >> >> This just fails with this: >> >> root@domU-example:~/webapp# cap production deploy --trace >> ** Invoke production (first_time) >> ** Execute production >> ** Invoke load:defaults (first_time) >> ** Execute load:defaults >> cap aborted! >> undefined method `elastic_load_balancer' for main:Object >> config/deploy/production.rb:14:in `<top (required)>' >> /var/lib/gems/2.0.0/gems/capistrano-3.0.1/lib/capistrano/setup.rb:13:in >> `load' >> /var/lib/gems/2.0.0/gems/capistrano-3.0.1/lib/capistrano/setup.rb:13:in >> `block (2 levels) in <top (required)>' >> /var/lib/gems/2.0.0/gems/rake-10.1.1/lib/rake/task.rb:236:in `call' >> /var/lib/gems/2.0.0/gems/rake-10.1.1/lib/rake/task.rb:236:in `block in >> execute' >> /var/lib/gems/2.0.0/gems/rake-10.1.1/lib/rake/task.rb:231:in `each' >> /var/lib/gems/2.0.0/gems/rake-10.1.1/lib/rake/task.rb:231:in `execute' >> /var/lib/gems/2.0.0/gems/rake-10.1.1/lib/rake/task.rb:175:in `block in >> invoke_with_call_chain' >> /usr/lib/ruby/2.0.0/monitor.rb:211:in `mon_synchronize' >> /var/lib/gems/2.0.0/gems/rake-10.1.1/lib/rake/task.rb:168:in >> `invoke_with_call_chain' >> /var/lib/gems/2.0.0/gems/rake-10.1.1/lib/rake/task.rb:161:in `invoke' >> /var/lib/gems/2.0.0/gems/rake-10.1.1/lib/rake/application.rb:149:in >> `invoke_task' >> /var/lib/gems/2.0.0/gems/rake-10.1.1/lib/rake/application.rb:106:in >> `block (2 levels) in top_level' >> /var/lib/gems/2.0.0/gems/rake-10.1.1/lib/rake/application.rb:106:in `each' >> /var/lib/gems/2.0.0/gems/rake-10.1.1/lib/rake/application.rb:106:in >> `block in top_level' >> /var/lib/gems/2.0.0/gems/rake-10.1.1/lib/rake/application.rb:115:in >> `run_with_threads' >> /var/lib/gems/2.0.0/gems/rake-10.1.1/lib/rake/application.rb:100:in >> `top_level' >> /var/lib/gems/2.0.0/gems/rake-10.1.1/lib/rake/application.rb:78:in `block >> in run' >> /var/lib/gems/2.0.0/gems/rake-10.1.1/lib/rake/application.rb:165:in >> `standard_exception_handling' >> /var/lib/gems/2.0.0/gems/rake-10.1.1/lib/rake/application.rb:75:in `run' >> /var/lib/gems/2.0.0/gems/capistrano-3.0.1/lib/capistrano/application.rb:12:in >> >> `run' >> /var/lib/gems/2.0.0/gems/capistrano-3.0.1/bin/cap:3:in `<top (required)>' >> /usr/local/bin/cap:23:in `load' >> /usr/local/bin/cap:23:in `<main>' >> Tasks: TOP => production >> >> Files: >> >> - Capfile >> >> root@domU-example:~/webapp# cat Capfile | grep -v "^#" >> require 'capistrano/setup' >> >> require 'capistrano/deploy' >> >> require 'capistrano/bundler' >> require 'capistrano/rails/assets' >> require 'capistrano/rails/migrations' >> >> Dir.glob('lib/capistrano/tasks/*.cap').each { |r| import r } >> >> - deploy.rb >> >> root@dom-example:~/webapp# cat config/deploy.rb | grep -v "^#" | grep -v >> "^$" >> set :application, 'blog' >> set :ssh_options, {:forward_agent => false, keys: >> ['/home/deploy/.ssh/private_key'], :paranoid => false} >> set :deploy_via, :remote_cache >> set :use_sudo, true >> set :deploy_to, '/webapp' >> set :scm, :git >> set :scm_user, :git >> namespace :deploy do >> desc 'Restart application' >> task :restart do >> on roles(:app), in: :sequence, wait: 5 do >> # Your restart mechanism here, for example: >> if test("[ ! -d " + release_path.join("tmp").to_s + " ]") >> execute "mkdir ", release_path.join("tmp") >> end >> execute :touch, release_path.join('tmp/restart.txt') >> end >> end >> after :restart, :clear_cache do >> on roles(:web), in: :groups, limit: 3, wait: 10 do >> # Here we can do anything such as: >> # within release_path do >> # execute :rake, 'cache:clear' >> # end >> end >> end >> after :finishing, 'deploy:cleanup' >> end >> >> - Stage files (production.rb, staging.rb) >> >> root@domU-example:~/webapp/config/deploy/# cat production.rb | grep -v >> "^#" >> require 'capistrano/autoscale' >> set :rails_env, "production" >> >> set :stage, :production >> set :user, 'deploy' >> >> elastic_load_balancer "example-elb.example.com", :web >> >> >> >> Any pointers in the right direction would be greatly appreciated. I've >> no issues reading as much documentation as you send me, but I haven't found >> this one yet.... >> >> -- Michael >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Capistrano" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] <javascript:>. >> To view this discussion on the web, visit >> https://groups.google.com/d/msgid/capistrano/68f5e1b6-7b3b-4e97-a856-02e9614f341e%40googlegroups.com >> . >> For more options, visit https://groups.google.com/groups/opt_out. >> > > -- You received this message because you are subscribed to the Google Groups "Capistrano" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web, visit https://groups.google.com/d/msgid/capistrano/826eadad-829c-465d-937a-0186df5c7bbc%40googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
