2011-11-30 7 views
13

Stiamo distribuendo con cap e utilizzando uno script che invia USR2 al processo di unicorno per ricaricarlo e di solito funziona, ma ogni tanto fallisce. Quando ciò accade guardando il registro unicorno rivela che sta cercando un Gemfile in una vecchia directory di rilascio che non esiste più.Problema di riavvio dell'unicorno con capistrano

Eccezione:

/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/definition.rb:14:in `build': /var/www/railsapps/inventory/releases/20111128233407/Gemfile not found (Bundler::GemfileNotFound) 

per chiarire che non è la versione corrente, ma una più antica che è stato da allora rimosso.

Quando funziona sembra funzionare correttamente, cioè preleva il nuovo codice, quindi non penso che sia in qualche modo bloccato riferendosi alla vecchia versione.

Qualche idea?

risposta

11

È necessario impostare la variabile di ambiente BUNDLE_GEMFILE prima di avviare il server, puntarlo su current/Gemfile.

23

Nel vostro unicorn.rb aggiungere il blocco before_exec

current_path = "/var/www/html/my project/current" 

before_exec do |server| 
    ENV['BUNDLE_GEMFILE'] = "#{current_path}/Gemfile" 
end 

Per saperne di più su di esso qui http://blog.willj.net/2011/08/02/fixing-the-gemfile-not-found-bundlergemfilenotfound-error/

+1

Inoltre, non dimenticare che se file di configurazione unicorno viene modificato, è necessario manualmente arresto e avviare unicorno di nuovo per caricare le nuove impostazioni. – lulalala