2012-03-14 10 views
5

Sto cercando di utilizzare correttamente Capistrano e RVM per distribuire la mia applicazione Ruby on Rails 3.2.2 sul computer remoto che esegue Ubuntu 10.04 LTS. È cuciture che ho risolto il mio problema precedente relativo allo "Rvm - Capistrano integration on Linux Ubuntu". Tuttavia, sulla distribuzione ottengo il seguente errore relativo alla gemma DelayedJob:Come risolvere "È necessario aggiungere i daemon gem 'al proprio Gemfile se si desidera utilizzarlo" Errore nella modalità di produzione?

... 
    * executing "cd /srv/www/<APP_NAME>/releases/20120314135318 && bundle install" 
    servers: ["<DOMAIN>"] 
    [<DOMAIN>] executing command 
    [<DOMAIN>] rvm_path=/usr/local/rvm /usr/local/rvm/bin/rvm-shell 'ruby-1.9.3-p125' -c 'cd /srv/www/<APP_NAME>/releases/20120314135318 && bundle install'  ** [out :: <DOMAIN>] Using rake (0.9.2.2) 
** [out :: <DOMAIN>] Using builder (3.0.0) 
    ... 
** [out :: <DOMAIN>] Using daemons (1.1.8) 
** [out :: <DOMAIN>] Using delayed_job (3.0.1) 
** [out :: <DOMAIN>] Using delayed_job_active_record (0.3.2) 
    ... 
** [out :: <DOMAIN>] Your bundle is complete! It was installed into /srv/www/<APP_NAME>/shared/bundle 
    ... 
    [<DOMAIN>] executing command 
    [<DOMAIN>] rvm_path=/usr/local/rvm /usr/local/rvm/bin/rvm-shell 'ruby-1.9.3-p125' -c 'cd /srv/www/<APP_NAME>/current; RAILS_ENV=production script/delayed_job stop' 
*** [err :: <DOMAIN>] /usr/local/rvm/gems/ruby-1.9.3-p125/gems/delayed_job-3.0.1/lib/delayed/command.rb:4:in `rescue in <top (required)>' 
*** [err :: <DOMAIN>] : 
*** [err :: <DOMAIN>] You need to add gem 'daemons' to your Gemfile if you wish to use it. 
*** [err :: <DOMAIN>] (
*** [err :: <DOMAIN>] RuntimeError 
*** [err :: <DOMAIN>]) 
*** [err :: <DOMAIN>] from /usr/local/rvm/gems/ruby-1.9.3-p125/gems/delayed_job-3.0.1/lib/delayed/command.rb:1:in `<top (required)>' 
*** [err :: <DOMAIN>] from /usr/local/rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.2/lib/active_support/dependencies.rb:251:in `require' 
*** [err :: <DOMAIN>] from /usr/local/rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.2/lib/active_support/dependencies.rb:251:in `block in require' 
*** [err :: <DOMAIN>] from /usr/local/rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.2/lib/active_support/dependencies.rb:236:in `load_dependency' 
*** [err :: <DOMAIN>] from /usr/local/rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.2/lib/active_support/dependencies.rb:251:in `require' 
*** [err :: <DOMAIN>] from script/delayed_job:4:in `<main>' 
    command finished in 7512ms 
*** [deploy:update_code] rolling back 
    ... 

failed: "rvm_path=$HOME/.rvm/ $HOME/.rvm/bin/rvm-shell 'ruby-1.9.3-p125' -c 'cd /srv/www/<APP_NAME>/releases && tar xzf /tmp/20120314140345.tar.gz && rm /tmp/20120314140345.tar.gz'" on <DOMAIN> 

Anche se la spiegazione errore è "È necessario aggiungere Gem 'demoni' al vostro Gemfile se si desidera utilizzarlo", ho già Aggiunta la daemons gemma alla mia Gemfile (dall'uscita sopra si può anche notare che io sono "utilizzando demoni (1.1.8)"):

... 
gem 'delayed_job' 
gem 'delayed_job_active_record' 
gem 'daemons' 
... 

Quindi, qual è il problema? Come posso risolverlo?


Nel mio file deploy.rb ho:

$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) 
require 'rvm/capistrano' 
set :rvm_ruby_string, 'ruby-1.9.3-p125' 
set :rvm_type, :user 
require 'bundler/capistrano' 
... 

P.S.: Terminale finestra di output:

$ ruby -v 
> ruby 1.9.3p125 (2012-02-16 revision 34643) [i686-linux] 
$ which ruby 
> /usr/local/rvm/rubies/ruby-1.9.3-p125/bin/ruby 
+0

lo script/delayed_job è tuo o no? Richiede bundler all'interno? – shingara

+0

@shingara - Cosa intendi con "è tuo o no"? Con "script/delayed_job" a quale file ti stai riferendo? Tuttavia, nel codice/output di cui sopra è tutto "mio" (cioè, il codice e gli output sono "reali"/"ciò che sto usando e ottenendo"). – user502052

+0

nel log passato il comando non è riuscito: 'RAILS_ENV = script di produzione/delayed_job stop' Voglio sapere se questo script è stato generato o lo si crea. – shingara

risposta

2

Esegui script/delayed_job con fardellatrice: bundle exec script/delayed_job start

+0

Il tuo codice non funziona e ottengo "' bundler: comando non trovato: RAILS_ENV = production - Installa gli eseguibili gem mancanti con 'bundle install'' "(ovviamente cerco di eseguire' bundle install' sulla macchina server ma non aggiorna nessuna gemma poiché tutti quelli sono già stati aggiornati). Ho anche provato a usare "' bundle exec rake script/delayed_job stop', ma ottengo questo errore: 'rake abortito! Non so come creare task 'stop''". – user502052

+0

1- Lo script delayed_job non è un'attività rake, quindi ovviamente il rake non funzionerà. 2- Sembra che tu abbia modificato il mio comando in modo errato. Prova a spostare l'env in primo piano come 'RAILS_ENV = script di produzione bundle exec/delayed_job start'. Si noti che questo deve essere eseguito dalla directory root dell'applicazione. – betamatt

+1

Non dimenticare di rendere eseguibile il file script/delayed_job: chmod + x script/delayed_job – Hannes