2011-11-23 14 views
15

ho installato i miei gioielli in produzione con:non possono ottenere exec fascio di lavorare nella produzione

cd /app/releases/current && bundle install --gemfile /app/releases/current/Gemfile --path /app/shared/bundle --deployment --quiet --without development test 

non posso bundle exec nessuna delle mie gemme (tranne rake e gem):

$ bundle exec whenever 
bundler: command not found: whenever 
Install missing gem executables with `bundle install` 

Le gemme siano correttamente installati in/app/shared/bundle:

$ cd /app/shared 
$ find . -name whenever 
./bundle/ruby/1.9.1/gems/whenever-0.6.8/bin/whenever 
./bundle/ruby/1.9.1/gems/whenever-0.6.8/lib/whenever 

My (ge nerated) fascio di configurazione (in /app/current/.bundle/config) è:

--- 
BUNDLE_FROZEN: "1" 
BUNDLE_PATH: /app/shared/bundle 
BUNDLE_DISABLE_SHARED_GEMS: "1" 
BUNDLE_WITHOUT: development:test 

Io corro rubino 1.9.2p290, installato manualmente in/usr/local/bin.

Devo bundle install le mie gemme con l'opzione --binstubs? Perché bundle exec non dovrebbe cercare lo BUNDLE_PATH memorizzato?

+0

Ho avuto un problema analogo Ho risolto con 'bundle install --deployment'. Non sono sicuro ** perché ** ha funzionato, ecco perché questo è un commento e non una risposta. –

+0

La mia attività capistrano include l'argomento '--deployment' quando si esegue' bundle install'. È questo che vuoi dire? O vuoi dire, rimuovere l'argomento '--path'? – nfm

+1

Stai utilizzando capistrano o eseguendo distribuzioni manuali? – Nick

risposta

0

ho cambiato il --path/app/shared/bundle-vendor/bundle, che ha reso il lavoro.

Questo mi sembrava sbagliato, quindi ho rimosso /app/shared/bundle e vendor/bundle e ho eseguito nuovamente bundle install su /app/shared/bundle.

Questo pulito bundle install ha risolto il problema. Non ho idea del perché!

Se qualcuno ha una spiegazione per questo, mi piacerebbe segnarti come risposta accettata. Ma questo ha risolto il problema per me.

0

Credo che quando ogni volta gioiello non è nel vostro Gemfile, o è nella sezione di test o di sviluppo della vostra Gemfile

+0

Grazie per il suggerimento. Ho 'gemma 'ogni volta'' nel corpo principale del mio Gemfile. – nfm

8

Utilizzo di Capistrano e Rails e utilizzo di deploy.rb come file del deployer.

Mi sono reso conto che cambiare l'ordine in cui appare require "whenever/capistrano" conta davvero. Ho messo quasi l'ultima riga:

In deploy.rb:

#first lines: 
set :rvm_ruby_string, "1.9.3" 
set :rvm_type, :user 
set :whenever_command, "bundle exec whenever" 

# others... 

# last lines 
require 'rvm/capistrano' 
require 'bundler/capistrano' 
require "whenever/capistrano" 

after "deploy:update_code", "customs:config" 
after "deploy:create_symlink","deploy:create_symlink" 
after "deploy", "deploy:cleanup" 

load 'deploy/assets' 
# end 
+0

rock, grazie! – ipd

+0

Non ho risolto il problema per me. – Jan

+0

Questa soluzione mi ha messo sulla strada giusta, ma non ha funzionato come descritto. Mettendo 'require "bundler/capistrano"' sulla prima riga di deploy.rb e 'require "ogni volta che/capistrano"' sull'ultima riga lo ha fatto per me. – Jos

0

Probabilmente diversi problemi causano lo stesso messaggio di errore. Per quanto mi riguarda, ho dovuto aggiornare la gemma capistrano dopo averla aggiornata ogni volta che gem per ottenere il supporto dei ruoli. pacchetto exec ogni volta che aveva funzionato prima del mio aggiornamento di quando.

1

Controlla dove il tuo gruppo: installazione è in fase di configurazione, e prova a spostarlo sopra richiede 'when/capistrano' nel tuo file deploy.rb.

Sembra che questo è stato attivato quando ho fatto un aggiornamento del pacchetto che ha aumentato la versione di gem di ogni volta nel mio Gemfile.lock.

Sembra che ogni volta che tenta di eseguire l'aggiornamento è chrontab prima che il mio file di deploy gestisce bundle: installare

da https://github.com/javan/whenever/blob/master/lib/whenever/capistrano.rb

before "deploy:finalize_update", "whenever:update_crontab" 

E il mio deploy.rb aveva

after 'deploy:finalize_update', 'bundle:install' 

Come tutti in questa discussione ho provato un po 'di cose e non sono sicuro che questo sia quello che ha risolto per me, ma cambiando l'installazione di bundle su prima della distribuzione: finalize_update, e anche se come "prima" sopra richiede "ogni volta che capistrano" sembra che sia la soluzione più probabile nel mio scenario.

4

ho avuto questo problema e aveva la richiede nell'ordine corretto, cioè

require 'rvm/capistrano' 
require 'bundler/capistrano' 
require 'whenever/capistrano' 

Si voleva ancora eseguire l'aggiornamento crontab prima bundle: installare. La soluzione era di aggiornare il mio bundle locale con

gem update bundler 

Dopo che ha iniziato a lavorare di nuovo. Non sono sicuro di cosa sia cambiato tra le versioni che hanno rotto tutto questo.

+0

Grazie per la tua nota che avevi bisogno per aggiornare il bundler LOCAL. Avevo tutto nell'ordine corretto e avevo controllato il server di produzione per assicurarmi che avesse l'ultima versione ecc., ma continuava a ricevere l'errore.Una volta aggiornato il mio bundler locale, tutto ha funzionato. Come indicato in questo pacchetto in bundle https://github.com/javan/whenever/issues/275 bundler e ogni volta che ci si trovava nel processo o in cui si lavoravano i ganci capistrano giusti da usare. –

+0

Qual è la differenza tra 'bundler/capistrano' e' capistrano/bundler'? Ho il più tardi nel mio Capfile. –

0

Utilizzando la brightbox deployment gem, che gestisce fardellatrice ecc per me (per magia, in alcune altre ricette) ho trovato questo funziona:

Sostituire

require "whenever/capistrano" 

con il contenuto del https://github.com/javan/whenever/blob/master/lib/whenever/capistrano/v2/hooks.rb poi modificarlo per caricare dopo il bundler: installazione termina (è possibile o meno avere quell'attività, non so se è standard)

# require "whenever/capistrano" 
# hacked whenever/lib/whenever/capistrano/v2/hooks.rb below to work with brightbox bundler installation 

require "whenever/capistrano/v2/recipes" 

# Write the new cron jobs near the end. 
after "bundler:install", "whenever:update_crontab" 
# If anything goes wrong, undo. 
after "deploy:rollback", "whenever:update_crontab" 
Problemi correlati