【问题标题】:Undefined method `instance' for Capistrano::Configuration:ClassCapistrano::Configuration:Class 的未定义方法“实例”
【发布时间】:2013-10-22 14:49:36
【问题描述】:

我正在尝试在 Rails 应用程序中首次启动并运行 Capistrano。我有一个运行 Ubuntu 12.04、nginx、unicorn 和 rails 的 linux 服务器,但是,我似乎遇到了一些问题。我还使用 RVM 使用 Capistrano 3.0.0、rails 3.2.14、bundler 1.4.0 和 ruby​​ 1.9.3p448。

我现在只设置了一个生产阶段,我只关心 Capistrano 与我的服务器通信并从 github 推送我的代码(目前还没有迁移和捆绑等)。

当我使用以下设置尝试命令 cap production deploy:checkcap production deploy:setup(似乎已弃用?)时,我收到以下错误消息:

我不确定从哪里开始处理这个错误,而且谷歌也没有给出太多建议。我尝试添加 rvm-capistrano gem 但无济于事。如何修改我的代码以解决此错误?

    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)

部署.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'

部署/生产.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 }

编辑 在查看 bundler 中 capistrano.rb 中的违规行后,它提到将 require 'bundler/deployment' 添加到 deploy.rb,这似乎消除了 capistrano 实例错误。

注意降级到 capistrano 2.15.5 消除了错误。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 rubygems capistrano


    【解决方案1】:

    对于 Capistrano 3,他们建议使用 http://github.com/capistrano/bundler

    这里提到了https://github.com/bundler/bundler/blob/master/lib/bundler/capistrano.rb

    【讨论】:

      【解决方案2】:

      首先,在 capistrano 3 中进行了一些更改。 请参阅发行说明:http://www.capistranorb.com/2013/06/01/release-announcement.html

      同时阅读自述文件。 https://github.com/capistrano/capistrano/blob/master/README.md

      Capistrano 3 已将捆绑器集成移到 gem 中。要解决您的问题:

       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。

      【讨论】:

      • 我真的不认为回到 v2 更容易。首先,值得尝试从 cap install 重新开始(尽管首先备份 deploy.rb、production.rb 和 capifile 文件!),然后重新添加片段直到它工作。另外,我使用 capistrano 3.1 解决了这个问题。我是 capistrano 3.3.5 上的问题。
      • @yekta 这个问题是在 2013 年提出的。就在第 3 版发布时。在那个时候,他回到 v2 会更容易,因为没有太多帮助。
      【解决方案3】:

      我怀疑这个问题是因为 Bundler 1.3.5 与最新版本的 Capistrano 不兼容。尝试升级到 Bundler 预发行版:gem install bundler --pre


      我还注意到您使用的是非常旧的 Rails 3.2 版本,它可能容易受到一些安全漏洞的攻击。我真的强烈建议将该版本的 Rails 升级到更新的版本,例如 Rails 3.2.14。

      【讨论】:

      • 我认为你是对的,这也突出了我项目中的一些问题。按照建议升级到 3.2.14,将在完全更新后尝试重新设置并返回此状态。
      • 因为它值得升级并没有为我解决这个问题。
      猜你喜欢
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-07
      • 2014-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多