Jamis,
That did it for me!! Thanks for your help, would've never thought of
that (I kinda wondered how current_path was being eval'd, but never
put 2 and 2 together).
Thanks again,
--
Matt
On Apr 20, 12:31 am, Jamis Buck <[EMAIL PROTECTED]> wrote:
> Yeah, I see what's going on now. Unfortunately, the "stage" variable
> doesn't get set until you actually select the stage (by running e.g.
> "cap staging foo" or "cap production blah"). And since you have
> variables that reference :stage during the loading of the recipe,
> things blow up.
>
> You'll need to make sure all of the variables that refer to :stage
> (either directly or indirectly) are loaded lazily. Specifically, note
> that referencing current_path causes deploy_to to be evaluated, which
> (in your case) also causes :application to be evaluated, which
> evaluates :stage. So, try putting :mongrel_conf in brackets:
>
> set(:mongrel_conf) { "#{current_path}/config/mongrel_cluster.yml" }
>
> Note that if you have any other variables that reference mongrel_conf,
> you could still run into problems.
>
> - Jamis
>
> On Apr 19, 2008, at 9:59 PM, Matt R wrote:
>
>
>
> > I modified the file to look like:
> > set :stages, %w(dev staging production)
> > set :default_stage, 'dev'
>
> > require 'capistrano/ext/multistage'
> > require 'railsmachine/recipes'
>
> > ##############
> > ### Global Rollout options
> > ##############
> > ....
>
> > and I still get the errors on the same line (although the line # is
> > bumped up a bit! ;))
>
> > Thanks for your help and making such a great tool!
>
> > --
> > Matt
>
> > On Apr 19, 11:53 pm, Jamis Buck <[EMAIL PROTECTED]> wrote:
> >> Ah, yeah. That'll fail, because when the variable is evaluated, the
> >> multistage code has not yet been loaded. Be sure to load the
> >> multistage extension as early as possible (after
> >> setting :default_stage, for instance), rather than throwing it at the
> >> very end.
>
> >> - Jamis
>
> >> On Apr 19, 2008, at 9:50 PM, Matt R wrote:
>
> >>> I'm getting this error as well. If I modify the lines that use
> >>> #{stage} (so they don't error out) and plug in the task :show_stage,
> >>> the correct stage is spit out. It's only when I'm using them in
> >>> string
> >>> eval set(:bar) {"#{stage}"} that they are not coming thru.
>
> >>> # each of the deploy/#{stage}.rb files look something like the
> >>> following:
> >>> production.rb
> >>> set :repos, "tags/current"
> >>> set :apache_proxy_port, 8000
> >>> set :apache_proxy_servers, 3
>
> >>> ---------------------
>
> >>> ##############
> >>> ### Deploy.rb
> >>> ##############
> >>> set :stages, %w(dev staging production)
> >>> set :default_stage, 'dev'
>
> >>> ##############
> >>> ### Global Rollout options
> >>> ##############
>
> >>> set(:domain) {"#{stage}.foobar.com"} # <- this fails SECOND if the
> >>> application line is modified (e.g. the deploy file is being parsed
> >>> bottom up somehow?)
>
> >>> set :app_name, "foobar"
>
> >>> # Lazily eval since we don't know this til runtime
> >>> set(:application) {"#{stage}.#{app_name}"} # this fails, undef var
> >>> stage
>
> >>> ##############
> >>> ### SVN Stuff
> >>> ##############
> >>> set :deploy_via, :export
>
> >>> set :user, "deploy"
> >>> set :group, user
>
> >>> # The SVN repos is not in a subdomain location, so we need to
> >>> capture
> >>> the "deploy root"
> >>> set :deploy_root, "var/www/apps/#{app_name}"
>
> >>> # Target directory for the application on the web and app servers.
> >>> set(:deploy_to) {"/#{deploy_root}/#{application}"}
> >>> set(:repository) {"svn+ssh://[EMAIL PROTECTED]/#{deploy_root}/repos/
> >>> #{repos}"}
>
> >>> ##############
> >>> ### Misc
> >>> ##############
> >>> # This must be after deploy_to
> >>> set :mongrel_conf, "#{current_path}/config/mongrel_cluster.yml"
>
> >>> set :rails_env, "production"
>
> >>> #
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> ====================================================================
> >>> # ROLES
> >>> #
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> ====================================================================
> >>> role(:web) {domain}
> >>> role(:app) {domain}
> >>> role :db, domain, :primary => true
> >>> #doesn't work -> role(:db) {domain, :primary => true}
> >>> role(:scm) {domain}
>
> >>> #
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> ====================================================================
> >>> # APACHE OPTIONS
> >>> #
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> ====================================================================
> >>> set :apache_server_name, domain
> >>> #set :apache_server_aliases, %w{alias1 alias2}
> >>> set :apache_default_vhost, true # force use of
> >>> apache_default_vhost_config
> >>> set :apache_default_vhost_conf, "/etc/httpd/conf/default.conf"
> >>> set :apache_conf, "/etc/httpd/conf/apps/#{app_name}.conf"
> >>> set :apache_ctl, "/etc/init.d/httpd"
> >>> #set in staging files
> >>> #set :apache_proxy_port, 8000
> >>> #set :apache_proxy_servers, 2
> >>> set :apache_proxy_address, "127.0.0.1"
> >>> set :apache_ssl_enabled, false
> >>> set :apache_ssl_ip, "127.0.0.1"
> >>> set :apache_ssl_forward_all, false
>
> >>> #
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> ====================================================================
> >>> # MONGREL OPTIONS
> >>> #
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> ====================================================================
> >>> set(:mongrel_servers) {apache_proxy_servers}
> >>> set(:mongrel_port) {apache_proxy_port}
> >>> set :mongrel_address, apache_proxy_address
> >>> set :mongrel_environment, "production"
> >>> set(:mongrel_pid_file) {"/var/run/mongrel_cluster/
> >>> #{application}.pid"}
> >>> set(:mongrel_conf) {"/etc/mongrel_cluster/#{application}.conf"}
> >>> set :mongrel_user, user
> >>> set :mongrel_group, group
>
> >>> #
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> ====================================================================
> >>> # CAPISTRANO OPTIONS
> >>> #
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> =
> >>> ====================================================================
> >>> # default_run_options[:pty] = true
> >>> set :keep_releases, 3
>
> >>> require 'capistrano/ext/multistage'
> >>> require 'railsmachine/recipes'
>
> >>> On Apr 19, 11:02 pm, Jamis Buck <[EMAIL PROTECTED]> wrote:
> >>>> Interesting, I can't duplicate this. If I add the following task to
> >>>> my
> >>>> deploy.rb:
>
> >>>> task :show_stage do
> >>>> puts(stage)
> >>>> end
>
> >>>> and then invoke this:
>
> >>>> cap production show_stage
>
> >>>> it correctly prints "production" to my terminal.
>
> >>>> Are you sure you've got the staging stuff configured right?
>
> >>>> - Jamis
>
> >>>> On Apr 19, 2008, at 6:34 PM, J2M wrote:
>
> >>>>> I have a multistage setup with a production.rb & testing.rb under
> >>>>> config/deploy and have set up the deploy.rb according to
> >>>>>http://weblog.jamisbuck.org/2007/7/23/capistrano-multistagebutnone
> >>>>> of my custom tasks within deploy.rb can reference the variable
> >>>>> stage
> >>>>> e.g.
>
> >>>>> namespace :nginx do
> >>>>> desc 'Setup symlinks to the sites public directory an nginx
> >>>>> config.'
> >>>>> task :setup, :roles => :app do
> >>>>> sudo "rm -f #{public_html}"
> >>>>> sudo "ln -fs #{current_path}/public #{public_html}"
> >>>>> sudo "rm -f /etc/nginx/vhosts/#{application_stage}.conf"
> >>>>> sudo "ln -fs #{current_path}/config/nginx.#{stage}.conf /etc/
> >>>>> nginx/vhosts/#{application}.#{stage}.conf"
> >>>>> end
> >>>>> end
>
> >>>>> I just get undefined local variable or method `stage' .....
>
> >>>>> How do I keep this dry and have all my custom tasks in deploy.rb
> >>>>> rather than having to put them into both deploy/production.rb and
> >>>>> deploy/testing.rb?
>
> >>>>> Thanks,
> >>>>> James
>
> >>>> smime.p7s
> >>>> 3KDownload
>
> >> smime.p7s
> >> 3KDownload
>
> > >
> smime.p7s
> 3KDownload
--~--~---------~--~----~------------~-------~--~----~
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/capistrano
-~----------~----~----~----~------~----~------~--~---