2011-09-13 14 views
9

Ho ricevuto il server con la configurazione di cui sopra.Bundler + RVM + Passeggero + implementazione di Capistrano e gemme mancanti

Questa è la parte importante della mia ricetta deploy.rb:

$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) 
require 'rvm/capistrano' 
require 'bundler/capistrano' 

set :rvm_ruby_string, 'ruby-1.9.2-p290' 
set :rvm_type, :system 
set :bundle_flags, "--deployment" 

set :default_environment, { 
    'PATH' => ENV['PATH'], 
    'RAILS_ENV' => ENV['RAILS_ENV'] 
} 

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

Esecuzione cap staging deploy come è, porta ad un errore:

* executing "cd /mnt/data-store/project/releases/shared && 
bundle install --gemfile /mnt/data-store/project/releases/shared/Gemfile 
--path /mnt/data-store/project/shared/bundle --deployment --without development test" 

** [out :: localhost] The --deployment flag requires a Gemfile.lock. 
Please make sure you have checked your Gemfile.lock into version control 
before deploying. 

... rolling back ... 

failed: "env PATH=... RAILS_ENV=staging rvm_path=/usr/local/rvm /usr/local/rvm/bin/rvm-shell 'ruby-1.9.2-p290' -c 'cd /mnt/data-store/project/releases/shared && bundle install --gemfile /mnt/data-store/project/releases/shared/Gemfile --path /mnt/data-store/project/shared/bundle --deployment --without development test'" on localhost 

Gemfile e Gemfile.lock sono nel controllo del codice sorgente . Ho eseguito lo bundle install localmente per primo per generare il file .lock. Ma il bundler/capistrano punta a/mnt/data-store/project/releases/shared/Gemfile quindi ho copiato manualmente entrambi i file lì. Sono sicuro che sto sbagliando qui. Immagino che dovrebbe essere copiato automaticamente.

deploy Eseguito nuovamente (1) e non sicuro sul fascio installare, aveva anche

Your bundle is complete! It was installed into /mnt/data-store/project/shared/bundle nell'output.

MA, una delle attività del mio cap esegue un rake. Il risultato è: * Impossibile trovare bcrypt-ruby-3.0.1 in nessuna delle fonti * Provare a eseguire bundle install.

Procedendo con la mia avventura, ho scoperto che una volta che hai .bundle/config con BUNDLE_PATH: /mnt/data-store/project/shared/bundle funziona. Ho avuto questa directory, probabilmente creata da bundler, sotto /mnt/data-store/releases/shared/, quindi ho copiato manualmente nella root dei binari.

Ora, rastrello/rotaie funzionano.

bundle show twitter mostra .../shared/bundle/ruby/1.9.1/gems/twitter-1.7.1.

MA, il ridistribuzione mi riporta a (1) perché la directory .bundle non è presente.

domande concrete:

  1. Ho bisogno di creare/copiare .bundle/config manualmente?
  2. Devo copiare Gemfile/Gemfile.lock manualmente nella directory condivisa? Cosa succede se aggiungo gemme? Devo tenere due copie o sincronizzarle manualmente/programmaticamente?
  3. COSA STO FACENDO SBAGLIATO?

Grazie!

risposta

5

Guardate questa parte nel file deployment.rb (codice Bundler)

args = ["--gemfile #{File.join(context.fetch(:current_release), bundle_gemfile)}"] 
args << "--path #{bundle_dir}" unless bundle_dir.to_s.empty? 

C'è una chiave denominata :current_release, questa chiave non è probabilmente stato impostato correttamente con Capistrano per qualche motivo.

il :current_release in Bundler punterà alla cartella "condivisa" anziché la versione più recente (con il timestamp)

Questo è sempre eseguito su before 'deploy:finalize_update'.

Quello che vorrei fare per risolvere questo problema è aggiungere il proprio hook a questo evento.

before 'deploy:finalize_update', 'x:set_current_release' 

e questo è il metodo effettivo

task :set_current_release, :roles => :app do 
   set :current_release, latest_release 
end 
+1

Grazie! Non riesco ancora a capire perché "current_release" punti al percorso condiviso anziché alla versione attuale. – elado

0

errore

The --deployment flag requires a Gemfile.lock. Please make sure you have checked your Gemfile.lock into version control before deploying. 

si verifica quando c'è qualcosa unwantend all'interno della vostra cartella stampa sul server. Dovrebbero esserci solo le directory con le versioni precedenti della tua app (il loro nome inizia con la data e assomiglia a 20111025125442).

Quindi, rimuovere directory o file indesiderati e quindi provare a distribuire di nuovo.

+0

Questo è stato per me. Grazie! –

+0

Ho ricevuto questo errore senza altre directory all'interno della cartella delle versioni ... – aardvarkk