2012-08-17 28 views
6

Estoy intentando implementar una aplicación Ruby On Rails tanto para la puesta en escena como para la producción con Capistrano.Despliegue de Capistrano para puesta en escena y producción

La única diferencia entre los dos es el: dominio y el: Repositorio

He seguido esta guía aquí: https://github.com/capistrano/capistrano/wiki/2.x-Multistage-Extension

He buscado por la red y todo lo que encuentro son los artículos que, básicamente, un refrito de lo Tengo arriba.

He intentado sólo la creación del: de dominio y: en el repositorio config/deploy/staging.rb y config/deploy/production.rb

He comprobado mis palabras para asegurarse de que te sueltan los sub-directorios correctamente y los nombres de los archivos.

Leyendo este artículo: staging and live app with capistrano parece que debería ser capaz de declarar las diferencias aquí.

Parece que el archivo staging.rb en realidad no se está leyendo. Cambié mi "deploy.rb" para tener una sola palabra jurada como primera línea, "cap deploy" me da el error esperado.

si pongo una sola mala palabra en la primera línea de "staging.rb" o "production.rb" me sale el mismo error:

`method_missing': undefined local variable or method `domain' 

La línea en cuestión es:

role :web, domain 

porque el valor no se recoge. Pero seguramente debería fallar en la palabra jurada en staging.rb o production.rb y no ejecutar en absoluto?

Si muevo el: dominio y el repositorio al archivo principal "deploy.rb" obtengo el error con la palabra jurada. Parece que no puedo establecer variables en los archivos "staging.rg" y "production.rb", sino simplemente completar tareas.

Cualquier ayuda sería muy apreciada o cree que yo debería tomar el trabajo de entrega de pizza ...

deploy.rb:

require 'capistrano/ext/multistage' 
set :stages, %w(production staging) 
set :default_stage, "staging" 

set :user, 'dave' 

set :applicationdir, "~/rails/example.com" 

set :scm, 'git' 

set :git_enable_submodules, 1 # if you have vendored rails 
set :branch, 'master' 
set :git_shallow_clone, 1 
set :scm_verbose, true 

set :keep_releases, 5 
after "deploy:update", "deploy:cleanup" 

# roles (servers) 
role :web, domain 
role :app, domain 
role :db, domain, :primary => true 

after "deploy", "deploy:migrate" 

# deploy config 
set :deploy_to, applicationdir 
set :deploy_via, :export 
# set :rake, 'bundle exec rake' 

# additional settings 
default_run_options[:pty] = true # Forgo errors when deploying from windows 
set :ssh_options, {:forward_agent => true} 
#ssh_options[:keys] = %w(/home/user/.ssh/id_rsa)   # If you are using ssh_keysset :chmod755, "app config db lib public vendor script script/* public/disp*"set :use_sudo, false 


# Passenger 
namespace :deploy do 
    task :start do ; end 
    task :stop do ; end 
    task :restart, :roles => :app, :except => { :no_release => true } do 
     run " touch #{File.join(current_path,'tmp','restart.txt')}" 
    end 
end 

Y mi config/desplegar archivo/staging.rb :

set :domain, 'example.com' 
set :repository, "ssh://[email protected]/~/rails/chamonix-mont-blanc.net" 

Si pongo el: dominio y: repositorio en el principal "deploy.rb" todo funciona bien y dandy.

Respuesta

5

Mover roles a su archivo staging.rb para que se vea como

set :domain, 'example.com' 

role :web, domain 
role :app, domain 
role :db, domain, :primary => true 

set :repository, "ssh://[email protected]/~/rails/chamonix-mont-blanc.net" 

Quitar código papeles de deploy.rb. Además, tendrá que modificar su production.rb de manera similar.

+7

Spot on. ¡¡Muchas gracias!! Todo funcionando ¡Le diré a la firma de entrega de pizza que no quiero su trabajo! –

Cuestiones relacionadas