2012-03-14 21 views
5

Tôi đang cố gắng sử dụng đúng Capistrano và RVM để triển khai ứng dụng Ruby on Rails 3.2.2 của mình cho máy từ xa đang chạy Ubuntu 10.04 LTS. Nó đường nối mà tôi đã giải quyết được sự cố trước đây của mình liên quan đến "Rvm - Capistrano integration on Linux Ubuntu". Tuy nhiên, việc triển khai tôi nhận được lỗi sau liên quan đến đá quý DelayedJob:Làm thế nào để giải quyết "Bạn cần phải thêm đá quý" daemon "để Gemfile của bạn nếu bạn muốn sử dụng nó" lỗi trong chế độ sản xuất?

... 
    * 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> 

Ngay cả khi giải thích lỗi là "Bạn cần phải thêm đá quý 'daemon' để Gemfile của bạn nếu bạn muốn sử dụng nó", tôi đã thêm vào các daemons đá quý để Gemfile của tôi (từ đầu ra ở trên, bạn thậm chí có thể lưu ý rằng tôi đang "Sử dụng daemon (1.1.8)"):

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

Vì vậy, vấn đề là gì? Làm thế nào tôi có thể giải quyết điều đó?


Trong file deploy.rb của tôi, tôi có:

$:.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' 
... 

T.B.: Terminal cửa sổ đầu ra:

$ 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

kịch bản/delayed_job là của bạn hay không? Nó yêu cầu bên trong? – shingara

+0

@shingara - Ý bạn là gì với "là của bạn hay không"? Với tập lệnh "script/delayed_job", bạn đang đề cập đến tệp nào? Tuy nhiên, trong mã trên/đầu ra là tất cả "của tôi" (có nghĩa là, mã và đầu ra là "thực"/"những gì tôi đang sử dụng và nhận được"). – user502052

+0

trong nhật ký bạn qua lệnh thất bại là: 'RAILS_ENV = script sản xuất/delay_job stop' Tôi muốn biết nếu kịch bản này được tạo ra hoặc bạn tạo ra nó. – shingara

Trả lời

2

Run script/delayed_job với bundler: bundle exec script/delayed_job start

+0

Mã của bạn không hoạt động và tôi nhận được lệnh "bundler: không tìm thấy: RAILS_ENV = production - Cài đặt các tập lệnh gem bị thiếu với 'bundle install''" (tất nhiên tôi thử chạy 'bundle install' trên máy chủ nhưng nó không cập nhật bất kỳ đá quý nào kể từ khi tất cả đã được cập nhật). Tôi cũng đã cố gắng sử dụng "bó script exec rake/delay_job stop', nhưng tôi nhận được lỗi này:' rake hủy bỏ! Không biết làm thế nào để xây dựng nhiệm vụ 'stop'' ". – user502052

+0

1- Kịch bản lệnh delay_job không phải là một công việc cào, vì vậy tất nhiên cào sẽ không hoạt động. 2 - Có vẻ như bạn đã sửa đổi lệnh của tôi không chính xác. Hãy thử di chuyển env về phía trước như 'RAILS_ENV = script bó sản xuất exec script/delay_job start'. Xin lưu ý rằng điều này phải được chạy từ thư mục gốc của ứng dụng. – betamatt

+1

Đừng quên làm cho tệp script/delay_job có thể thực thi được: chmod + x script/delay_job – Hannes