Не удается развернуть приложение Rails с помощью Capistrano и RVM

У меня есть приложение Rails, которое я развертывал с помощью Capistrano. Я установил RVM на сервер, так как хотел использовать более новую версию Ruby, и добавил это в свой файл deploy.rb (согласно различным инструкциям, которые я нашел):

$:.unshift(File.expand_path('./lib', ENV['rvm_path']))
require 'rvm/capistrano'
set :rvm_ruby_string, '1.9.2'
set :rvm_type, :user

Когда я запускаю, cap deploy , это происходит:

    [staging.example.com] executing command
 ** [out :: staging.example.com] /usr/local/lib/site_ruby/1.8/rubygems.rb:779:in `report_activate_error': Could not find RubyGem bundler (>= 0) (
 ** [out :: staging.example.com] Gem::LoadError)
 ** [out :: staging.example.com] from /usr/local/lib/site_ruby/1.8/rubygems.rb:214:in `activate'
 ** [out :: staging.example.com] from /usr/local/lib/site_ruby/1.8/rubygems.rb:1082:in `gem'
 ** [out :: staging.example.com] from /usr/bin/bundle:18
    command finished in 801ms
*** [deploy:update_code] rolling back
  * executing "rm -rf /home/example/staging.example.com/releases/20110714180125; true"
    servers: ["staging.example.com"]
    [staging.example.com] executing command
    command finished in 895ms
    failed: "rvm_path=$HOME/.rvm/ /usr/local/bin/rvm-shell '1.9.2' -c 'bundle install --gemfile /home/example/staging.example.com/releases/20110714180125/Gemfile --path /home/example/staging.example.com/shared/bundle --deployment --quiet --without development production'" on staging.example.com

Почему capistrano использует Ruby 1.8? Мой путь, очевидно, тоже запутался.

Вот результат rvm info на staging.example.com:

ruby-1.9.2-p180:

system:
  uname:       "Linux staging 2.6.39.1-linode34 #1 SMP Tue Jun 21 10:29:24 EDT 2011 i686 GNU/Linux"
  bash:        "/bin/bash => GNU bash, version 4.1.5(1)-release (i486-pc-linux-gnu)"
  zsh:         " => not installed"

rvm:
  version:      "rvm 1.6.22 by Wayne E. Seguin (wayneeseguin@gmail.com) [https://rvm.beginrescueend.com/]"

ruby:
  interpreter:  "ruby"
  version:      "1.9.2p180"
  date:         "2011-02-18"
  platform:     "i686-linux"
  patchlevel:   "2011-02-18 revision 30909"
  full_version: "ruby 1.9.2p180 (2011-02-18 revision 30909) [i686-linux]"

homes:
  gem:          "/home/example/.rvm/gems/ruby-1.9.2-p180"
  ruby:         "/home/example/.rvm/rubies/ruby-1.9.2-p180"

binaries:
  ruby:         "/home/example/.rvm/bin/ruby"
  irb:          "/home/example/.rvm/bin/irb"
  gem:          "/home/example/.rvm/bin/gem"
  rake:         "/home/example/.rvm/bin/rake"

environment:
  PATH:         "/home/example/.rvm/bin:/home/example/.rvm/gems/ruby-1.9.2-p180/bin:/home/example/.rvm/gems/ruby-1.9.2-p180@global/bin:/home/example/.rvm/rubies/ruby-1.9.2-p180/bin:/home/example/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/ruby/bin"
  GEM_HOME:     "/home/example/.rvm/gems/ruby-1.9.2-p180"
  GEM_PATH:     "/home/example/.rvm/gems/ruby-1.9.2-p180:/home/example/.rvm/gems/ruby-1.9.2-p180@global"
  MY_RUBY_HOME: "/home/example/.rvm/rubies/ruby-1.9.2-p180"
  IRBRC:        "/home/example/.rvm/rubies/ruby-1.9.2-p180/.irbrc"
  RUBYOPT:      ""
  gemset:       ""
121-- -1489678- Длинный опрос в Django Я использую своего рода длинный опрос в моем приложении Django, чтобы возвращать клиенту статусные сообщения о длительной операции по мере ее выполнения. Я делаю это, возвращая объект HttpResponse в моя функция просмотра ...

Я использую своего рода длинный опрос в моем приложении Django, чтобы возвращать клиенту сообщения о состоянии долгой операции по мере ее выполнения. Я делаю это, возвращая HttpResponse o bject в моем представлении функция, которая инициализируется итератором, возвращающим строки. Все это прекрасно работает, но функция итератора становится довольно длинной с множеством выходов для возврата сообщений о состоянии.

Я бы хотел улучшить это, разделив долгую операцию на несколько функций, каждая из которых возвращает свой собственный статус. Сообщения. Но я не вижу способа сделать это. Другими словами, у меня есть это:

def my_long_operation():
  do_something()
  yield "Did something"
  do_something_else()
  yield "Did something else"

... и я хотел бы иметь:

def do_something():
  do_first_part_of_something()
  yield "Did first part of something"
  do_second_part_of_something()
  yield "Did second party of something"

def do_something_else():
  do_first_part_of_something_else()
  yield "Did first part of something else"
  do_second_part_of_something_else ()
  yield "Did second party of something else"

def my_long_operation():
  do_something()
  do_something_else()

Есть ли способ получить доходность во втором примере, чтобы передать значения вызывающей стороне итератора? Если нет, есть ли лучший подход? Я посмотрел на WebSockets, но он, похоже, еще не полностью готов (особенно с точки зрения поддержки браузера). Я также подумал о реальном опросе сервера, но он будет намного сложнее, поэтому я хотел бы продолжать поддерживать открытое соединение и передавать сообщения, если это возможно.

5
задан Matthew Gertner 14 July 2011 в 18:45
поделиться