2014-05-24 12 views
14

sto ottenendo il seguente output durante la distribuzione:metodo non definito `run' per principale: Oggetto

cap aborted! 
NoMethodError: undefined method `run' for main:Object 
config/deploy.rb:37:in `block (2 levels) in <top (required)>' 
/var/lib/gems/1.9.1/gems/capistrano-3.2.1/lib/capistrano/dsl/task_enhancements.rb:12:in `block in after' 
/var/lib/gems/1.9.1/gems/capistrano-3.2.1/lib/capistrano/application.rb:15:in `run' 
/var/lib/gems/1.9.1/gems/capistrano-3.2.1/bin/cap:3:in `<top (required)>' 
Tasks: TOP => deploy:permissions 
(See full trace by running task with --trace) 
The deploy has failed with an error: #<NoMethodError: undefined method `run' for main:Object> 

sto usando Capistrano Versione: 3.2.1 (Rake Versione: 10.3.2). l'implementazione funziona bene, ma ho creato un compito dopo distribuire per modificare il proprietario del rilascio schierato, che sembra così:

namespace :deploy do 
    task :permissions do 
     run "chown -R :#{fetch(:group)} #{deploy_to} && chmod -R g+s #{deploy_to}" 
    end 
end 

after :deploy, "deploy:permissions" 

Vars sono definiti correttamente (mi fisso che errore prima), ma ottengo questo errore metodo mancante per il metodo run e non so perché.

+1

funziona ora quando si specifica dove voglio eseguire il codice chiamando 'on'. e devo anche sostituire il comando run con il comando execute. – agro

risposta

18

Il codice utilizza la sintassi 2.x, mentre la versione è 3.x. In 3.x, la sintassi è la seguente:

namespace :deploy do 
    on roles :all do 
    execute :chown, "-R :#{fetch(:group)} #{deploy_to} && chmod -R g+s #{deploy_to}" 
    end 
end 
+0

penso di aver mixato alcuni how-to per diverse versioni di cap. funziona ora, quindi grazie! – agro

+0

@Gergo Erdosi: Quale potrebbe essere l'equivalente di 'namespace: myapp fare compito: fare restart_webserver # Server Restart Web run "servizio sudo apache2 restart" fine fine dopo "distribuire", "myapp: restart_webserver"' –