ruby: нет такого файла для загрузки ubygems (LoadError) при запуске cap Rubber:create_staging

Я пытаюсь запустить инстанс Amazon EC2, следуя инструкциям Railscast #347 Rubber и Amazon. EC2.

Проект Rails настроен следующим образом. Файл .ruby-version:

ruby-1.9.3

Вот Gemfile:

source 'http://rubygems.org'

ruby '1.9.3'
gem 'rails', '~> 3.2.13'
gem 'rb-readline', '~> 0.5.0'
gem 'counter_culture', '~> 0.1.12'
gem 'jquery-rails', '~> 3.0.2'
gem 'therubyracer', '~> 0.11.4', require: 'v8'
gem 'attribute_normalizer', '~> 1.1.0'

group :assets do
  gem 'sass-rails', '~> 3.2.5'
  gem 'coffee-rails', '~> 3.2.2'
  gem 'uglifier', '~> 2.1.1'
end

group :development do
  gem 'debugger', '~> 1.6.0'
end

group :development, :test do
  gem 'sqlite3', '~> 1.3.7'
end

group :production do
  gem 'pg', '~> 0.15.1'
end

gem 'rubber', '~> 2.5.2'
gem 'open4'
gem 'gelf'
gem 'graylog2_exceptions', :git => 'git://github.com/wr0ngway/graylog2_exceptions.git'
gem 'graylog2-resque'

Я запускаю следующую команду rubber:

$ rubber vulcanize complete_passenger_postgresql

Помимо других файлов, rubber-ruby.yml генерируется следующим образом (комментарии удалены):

# config/rubber/rubber-ruby.yml
packages: [build-essential, git-core, subversion, curl, autoconf, bison, ruby, zlib1g-dev, libssl-dev, libreadline6-dev, libxml2-dev, libyaml-dev]
ruby_build_version: 20130501
ruby_version: 1.9.3
ruby_path: "/usr/local/rubies/#{ruby_version}"

После общения с nirvdrum в IRC я ​​уже изменил ruby_version: 1.9.3 на ruby_version: 1.9.3-p448 и попробовал. Хотя такая же ошибка.

Я придерживался руководства и настроил только обязательные параметры:

# config/rubber/rubber.yml
app_name: ...
domain: ...
access_key: ...
secret_access_key: ...
account: ...
key_name: ...

Следуя руководству, я тестирую установку:

$ cap rubber:create_staging

Скрипт некоторое время работает, устанавливая и перезапуская инстансы, но через некоторое время останавливается:

 ...

 ** [out :: production.foobar.com] Identified as a _site plugin, moving to _site structure ...
 ** [out :: production.foobar.com] Installed head
    command finished in 5005ms
  * 2013-07-11 01:02:20 executing `rubber:graylog:server:install'
    servers: ["production.foobar.com"]
 ** sftp upload #<StringIO:0x007f2d89221718> -> /tmp/install_graylog_server
    [production.foobar.com] /tmp/install_graylog_server
    [production.foobar.com] done
  * sftp upload complete
  * executing "sudo -p 'sudo password: '  bash -l /tmp/install_graylog_server"
    servers: ["production.foobar.com"]
    [production.foobar.com] executing command
    command finished in 2320ms
  * 2013-07-11 01:02:23 executing `rubber:graylog:web:install'
    servers: ["production.foobar.com"]
 ** sftp upload #<StringIO:0x007f2d817c2a58> -> /tmp/install_graylog_web
    [production.foobar.com] /tmp/install_graylog_web
    [production.foobar.com] done
  * sftp upload complete
  * executing "sudo -p 'sudo password: '  bash -l /tmp/install_graylog_web"
    servers: ["production.foobar.com"]
    [production.foobar.com] executing command
    command finished in 945ms
  * 2013-07-11 01:02:24 executing `rubber:apache:install'
    servers: ["production.foobar.com"]
 ** sftp upload #<StringIO:0x007f2d81911800> -> /tmp/install_apache
    [production.foobar.com] /tmp/install_apache
    [production.foobar.com] done
  * sftp upload complete
  * executing "sudo -p 'sudo password: '  bash -l /tmp/install_apache"
    servers: ["production.foobar.com"]
    [production.foobar.com] executing command
 ** [out :: production.foobar.com] Site default disabled.
 ** [out :: production.foobar.com] To activate the new configuration, you need to run:
 ** [out :: production.foobar.com] service apache2 reload
    command finished in 636ms
  * 2013-07-11 01:02:25 executing `rubber:setup_volumes'
  * 2013-07-11 01:02:25 executing `rubber:setup_gem_sources'
    triggering before callbacks for `rubber:setup_gem_sources'
  * 2013-07-11 01:02:25 executing `rubber:base:install_ruby_build'
    servers: ["production.foobar.com"]
 ** sftp upload #<StringIO:0x007f2d81a7f750> -> /tmp/install_ruby_build
    [production.foobar.com] /tmp/install_ruby_build
    [production.foobar.com] done
  * sftp upload complete
  * executing "sudo -p 'sudo password: '  bash -l /tmp/install_ruby_build"
    servers: ["production.foobar.com"]
    [production.foobar.com] executing command
 ** [out :: production.foobar.com] Installing ruby-build v20130501
 ** [out :: production.foobar.com] Installed ruby-build at /usr/local
    command finished in 1475ms
    triggering after callbacks for `rubber:base:install_ruby_build'
  * 2013-07-11 01:02:27 executing `rubber:base:install_ruby'
    servers: ["production.foobar.com"]
 ** sftp upload #<StringIO:0x007f2d81aca638> -> /tmp/install_ruby
    [production.foobar.com] /tmp/install_ruby
    [production.foobar.com] done
  * sftp upload complete
  * executing "sudo -p 'sudo password: '  bash -l /tmp/install_ruby"
    servers: ["production.foobar.com"]
    [production.foobar.com] executing command
 ** [out :: production.foobar.com] Compiling and installing ruby 1.9.3.  This may take a while ...
    command finished in 1603ms
    triggering after callbacks for `rubber:base:install_ruby'
  * 2013-07-11 01:02:29 executing `rubber:install_gems'
    servers: ["production.foobar.com"]
 ** sftp upload #<StringIO:0x000000033d5920> -> /tmp/gem_helper
    [production.foobar.com] /tmp/gem_helper
    [production.foobar.com] done
  * sftp upload complete
  * executing "sudo -p 'sudo password: '  bash -l -c 'ruby /tmp/gem_helper install $CAPISTRANO:VAR$'"
    servers: ["production.foobar.com"]
    [production.foobar.com] executing command
 ** ruby: no such file to load -- ubygems (LoadError)
    command finished in 851ms

failed: "/bin/bash -l -c 'sudo -p '\\''sudo password: '\\''  bash -l -c '\\'' \
  ruby /tmp/gem_helper install open4 aws-s3 bundler rubber:2.5.2 \
  gelf graylog2_exceptions graylog2-resque pg fastthread rack \
  passenger:3.0.19 puma'\\'''" on production.foobar.com

Проверка установки Ruby в /usr/local/rubies через ssh на сервере показывает, что он не установлен.

Это было опубликовано в IRC freenode #rubberec2 в качестве комментария к моей проблеме:

Однако я не могу понять, как применить это к конфигурации Rubber.


person JJD    schedule 10.07.2013    source источник


Ответы (1)


Как указано в вопросе, я создал файлы конфигурации для Rubber, включая rubber-ruby.yml.

# config/rubber/rubber-ruby.yml
...
ruby_build_version: 20130501
ruby_version: 1.9.3
...

Я повторил весь процесс с той же версией Rubber (я просто исправил версию на 2.5.2, так как тем временем есть обновление). На этот раз я заметил, что для ruby_version установлено значение 1.9.3-p392, как вы можете видеть здесь. Кажется, я случайно изменил этот параметр?!

Если отменить это изменение, развертывание действительно работает так, как ожидалось.

Как уже упоминалось, тем временем была опубликована версия Rubber 2.5.3, содержащая обновленные настройки:

# config/rubber/rubber-ruby.yml
...
ruby_build_version: 20130628
ruby_version: 1.9.3-p448
...

Я также попробовал новую версию для тех, кто любопытен. Это тоже работает.
Большое спасибо Кевину Менарду и Мэтту Конвею, которые настойчиво отвечали на мои вопросы в IRC-канале проекта.

person JJD    schedule 11.07.2013