Undefined метод `instance 'для Capistrano:: Конфигурация: класс
Я пытаюсь запустить Capistrano в первый раз в приложении rails. У меня есть Linux-сервер с Ubuntu 12.04, nginx, единорогом и рельсами, однако, похоже, у меня есть несколько проблем. Я также использую Capistrano 3.0.0, rails 3.2.14, bundler 1.4.0 и ruby 1.9.3p448 с использованием RVM.
У меня только начальный этап производства, и на данный момент я заинтересован только в том, что Капистрано общается с моим сервером и выталкивает мой код из github (пока нет миграции и группировки и т.д.).
Когда я пытаюсь выполнить команду cap production deploy:check
или cap production deploy:setup
(которая, кажется, устарела?) с настройкой ниже, я получаю следующую ошибку msg:
Я не уверен, с чего начать эту ошибку, и Google не предлагает многого. Я попытался добавить драгоценный камень rvm-capistrano
, но безрезультатно. Как изменить код для устранения этой ошибки?
cap aborted!
undefined method `instance' for Capistrano::Configuration:Class
/Users/andrew/.rvm/gems/ruby-1.9.3-p448/gems/bundler-1.4.0.rc.1/lib/bundler/capistrano.rb:11:in `<top (required)>'
config/deploy.rb:1:in `<top (required)>'
/Users/andrew/.rvm/gems/ruby-1.9.3-p448/gems/capistrano-3.0.0/lib/capistrano/setup.rb:12:in `load'
/Users/andrew/.rvm/gems/ruby-1.9.3-p448/gems/capistrano-3.0.0/lib/capistrano/setup.rb:12:in `block (2 levels) in <top (required)>'
/Users/andrew/.rvm/gems/ruby-1.9.3-p448/gems/capistrano-3.0.0/lib/capistrano/application.rb:12:in `run'
/Users/andrew/.rvm/gems/ruby-1.9.3-p448/gems/capistrano-3.0.0/bin/cap:3:in `<top (required)>'
/Users/andrew/.rvm/gems/ruby-1.9.3-p448/bin/cap:23:in `load'
/Users/andrew/.rvm/gems/ruby-1.9.3-p448/bin/cap:23:in `<main>'
Tasks: TOP => production
(See full trace by running task with --trace)
deploy.rb
require "bundler/capistrano"
set :stages, %w(staging production)
set :default_stage, "production"
set :application, "my_app"
set :user, "andrew"
set :scm, "git"
set :repository, "https://github.com/my_repo/#{application}"
set :branch, "master"
set :deploy_to, "/home/rails/#{application}"
set :deploy_via, :remote_cache
set :use_sudo, false
default_run_options[:pty] = true
ssh_options[:forward_agent] = true
after "deploy", "deploy:cleanup" # keep only the last 5 releases
namespace :deploy do
task :restart, roles: :app do
run "touch #{current_path}tmp/restart.txt"
end
end
after :finishing, 'deploy:cleanup'
развернуть/production.rb
#Real IP ommitted
server "10.2.32.68", :web, :app, :db, primary: true
Capfile
# Load DSL and Setup Up Stages
require 'capistrano/setup'
# Includes default deployment tasks
require 'capistrano/deploy'
# require 'capistrano/rvm'
# require 'capistrano/rbenv'
# require 'capistrano/chruby'
# require 'capistrano/bundler'
# require 'capistrano/rails/assets'
# require 'capistrano/rails/migrations'
# Loads custom tasks from `lib/capistrano/tasks' if you have any defined.
Dir.glob('lib/capistrano/tasks/*.cap').each { |r| import r }
РЕДАКТИРОВАТЬ. Посмотрев на строку с нарушением в capistrano.rb в пакеторе, он добавляет, что требует добавить "bundler/deployment" для deploy.rb, который, казалось, избавился от ошибки экземпляра capistrano.
ПРИМЕЧАНИЕ С понижением до capistrano 2.15.5, который избавился от ошибок.
Ответы
Ответ 1
Прежде всего, было внесено несколько изменений в capistrano 3.
См. Примечания к выпуску: http://www.capistranorb.com/2013/06/01/release-announcement.html
Также пройдите через readme.
https://github.com/capistrano/capistrano/blob/master/README.md
Capistrano 3 перенесла интеграцию пакетов в драгоценный камень. Чтобы решить вашу проблему:
1. Uncomment require 'capistrano/bundler' from capify.
2. add gem 'capistrano-bundler' to your gemfile.
3. Go through the comments in capify file and uncomment whichever module you require.
О, и если вы еще не хотите использовать bundler, удалите первую строку: require "bundler/capistrano". легко.
Также вы не можете использовать переменные, подобные предыдущему пути. Вместо прямого чтения используйте функцию fetch (: application) для чтения переменной.
Мне было бы легче вернуться к capistrano v2.
Ответ 2
Я подозреваю, что эта проблема связана с тем, что Bundler 1.3.5 несовместим с последней версией Capistrano. Попробуйте перейти к предварительным релизам Bundler: gem install bundler --pre
.
Я также заметил, что вы используете очень старую версию Rails 3.2, которая, вероятно, уязвима для некоторых эксплойтов безопасности. Я бы настоятельно рекомендовал обновить эту версию Rails до более поздней версии, например Rails 3.2.14.
Ответ 3
Для Capistrano 3 они рекомендуют использовать http://github.com/capistrano/bundler
Здесь упоминается https://github.com/bundler/bundler/blob/master/lib/bundler/capistrano.rb