2014-11-28 30 views
10

Ho la seguente operazione Rake:Esecuzione caposquadra da un task rake

namespace :foreman do 
    task :dev do 
    `foreman start -f Procfile.dev` 
    end 
end 

desc "Run Foreman using Procfile.dev" 
task :foreman => 'foreman:dev' 

Il comando Forman funziona benissimo dal guscio, ma quando corro rake foreman ottengo il seguente errore:

/Users/me/.gem/ruby/2.0.0/gems/bundler-1.5.2/lib/bundler/rubygems_integration.rb:240:in `block in replace_gem': foreman is not part of the bundle. Add it to Gemfile. (Gem::LoadError) 
    from /Users/me/.gem/ruby/2.0.0/bin/foreman:22:in `<main>' 

Forman afferma espressamente:

Ruby users should take care not to install foreman in their project's Gemfile 

Quindi, come posso ottenere t il suo compito di correre?

risposta

2

Se è necessario farlo funzionare tramite rastrello, provare a cambiare il guscio-out tramite apice inverso di utilizzare un percorso hard-coded per il caposquadra a livello di sistema binario

`/global/path/to/foreman start -f Procfile.dev` 

Hai solo bisogno di usare 'che' o 'locate' o uno strumento simile per determinare il percorso che funziona al di fuori contesto bundler. Se si utilizza rbenv, questo potrebbe essere sufficiente:

$ rbenv which rake 
/home/name/.rbenv/versions/1.9.3-p448/bin/rake 

Spero che ti aiuti ad andare avanti.

+0

'rvm quale caposquadra start' se si utilizza RVM – cevaris

1

se deve essere un compito rastrello, provate questo (da this answer):

namespace :foreman do 
    task :dev do 
    sh "foreman start -f Procfile.dev" 
    end 
end 

se non lo fa hanno ad essere un compito rastrello, ho un semplice script bash per iniziare per un progetto specifico che funziona bene:

#!/bin/bash 

export PROJECT_DIR=`pwd` 
export PORT=$1 

source "$HOME/.rvm/scripts/rvm" 

unset BUNDLE_GEMFILE 
unset BUNDLE_BIN_PATH 
unset RUBYOPT 
unset GEM_HOME 
unset GEM_PATH 

(cd <project full path> && exec foreman start -p $PORT) 
+0

Grazie, che preferisco tenere tutto in compiti (hanno un sacco già). Sfortunatamente usare 'sh' o' system' nell'attività mi dà lo stesso errore. – Undistraction

+0

forse quell'avvertenza è di non installare nel gemfile del progetto - è installato/hai provato a installarlo nel tuo gemfile globale? – dax

+0

È definitivamente disponibile per il sistema. Posso eseguire 'foreman start -f Procfile.dev' senza' bundle exec' e funziona bene. – Undistraction

2

Non sono sicuro se questo funzionerà, ma si potrebbe esportare le variabili di ambiente connessi con la shell in modo esplicito e poi fare una chiamata a foreman. FWIW, non penso che sia raccomandato, e suggerirei di usare uno script bash come propone @dax.

Passi

  1. Ricevi le variabili $PATH e l'altro ambiente dalla shell

    printenv >> shell.env 
    
  2. ricevere le variabili d'ambiente dall'ambiente rotaie

    namespace :foreman_test do 
        task :dev do 
        `printenv >> rails.env` 
        end 
    end 
    
  3. confrontare i due e scopri l'ambiente modificato variabili ent, e configurarli nel vostro compito rake nel system chiamata

    namespace :foreman do 
        task :dev do 
        `export PATH=/original/path:/value && GEM_DIR=/some/folder && foreman start -f Procfile.dev` 
        end 
    end 
    
+0

Grazie per la risposta. Per favore, puoi spiegare perché non è in esecuzione l'esecuzione dal task rake? Dato che l'attività non si basa su ': environment' perché esattamente sta attraversando il pacchetto? – Undistraction

+0

@Pedr Una spiegazione è che hai inizializzato il repository con '--binstubs', e quindi quando esegui' rake taskname', stai effettivamente usando 'bin/rake', e il tuo' GEMFILE' è selezionato per default. Ad ogni modo, la mia soluzione ha funzionato? –

+0

Non uso i binstub. Io invece uso un alias 'be'. Ho provato a eseguire 'rake',' be rake' e 'bin/rake'. Tutto porta allo stesso errore che ho descritto sopra. Non posso testare al momento, ma ci provo il prima possibile. – Undistraction

0

Un po 'più giù la linea e qui è come lo faccio citato in giudizio chruby:

namespace :foreman do 
    task :dev do 
    # 1. Load .bash_profile to ensure chruby is available 
    # 2. Switch the ruby version to the one defined in .ruby-version 
    # 3. Start foreman 
    system %(
     source ~/.bash_profile 
     chruby "$(cat .ruby-version)" 
     foreman start --procfile Procfile.dev 
    ) 
    end 
end 

desc "Run Foreman using Procfile.dev" 
task :foreman => 'foreman:dev'