ruby-on-rails - Capistrano Rails 正在跳过任务 `deploy:updating',因为它之前已被调用

标签 ruby-on-rails capistrano capistrano3 rvm-capistrano rvm1-capistrano3

我在使用rvm的rails上,

使用 capistrano 部署时出现以下错误:

Skipping task `deploy:updating'.
Capistrano tasks may only be invoked once. Since task `deploy:updating' was previously invoked, invoke("deploy:updating") at /home/ziaulrehman/.rvm/gems/ruby-2.3.4/gems/capistrano-3.8.2/lib/capistrano/tasks/framework.rake:64 will be skipped.
If you really meant to run this task again, first call Rake::Task["deploy:updating"].reenable
THIS BEHAVIOR MAY CHANGE IN A FUTURE VERSION OF CAPISTRANO. Please join the conversation here if this affects you.
https://github.com/capistrano/capistrano/issues/1686

我的 capfile 有:

require 'capistrano/setup'
require 'capistrano/deploy'
require 'capistrano/bundler'
require 'capistrano/rails'
require 'rvm1/capistrano3'
require 'capistrano/puma'
require 'capistrano/sidekiq'
install_plugin Capistrano::Puma
install_plugin Capistrano::Puma::Nginx

require "capistrano/scm/git"
install_plugin Capistrano::SCM::Git

require "capistrano/rails/assets"
# there are no customm tasks
Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }

我的deploy.rb看起来像:

# config valid only for current version of Capistrano
lock "3.8.2"

set :application,     "webapp"
set :deploy_via,      :remote_cache
set :keep_releases,   5
set :repo_url,        "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c2a5abb682a5abb6aab7a0eca1adaf" rel="noreferrer noopener nofollow">[email protected]</a>:org/webapp.git"

append :linked_files, 'config/database.yml', 'config/secrets.yml', '.env.generic'
append :linked_dirs,  'vendor/bundle', 'public/uploads'

# Default deploy_to directory is /var/www/my_app_name
set :deploy_to,       "/home/deployer/www/webapp"

set :rvm1_ruby_version, 'ruby-2.3.4'
# set :rvm_type, :user
# set :default_env,      { rvm_bin_path: '~/.rvm/bin' }
# fetch(:default_env).merge!( rvm_path: '~/.rvm/bin' )
set :rvm1_map_bins, -> { fetch(:rvm_map_bins).to_a.concat(%w{rake gem bundle ruby foreman}).uniq }

before 'deploy', 'rvm1:install:ruby'

set :sidekiq_processes => 2
set :keep_assets, 2
set :sidekiq_config =>    '#{release_path}/config/sidekiq.yml'

set :pty, true

我绝对没有自定义任务或任何东西,这些都是我正在使用的 gem ,我怀疑 gem 中存在某种冲突。

如果有人能准确指出这个问题是在哪里产生的以及我该如何解决这个问题,那就太好了。另外,我想知道这个问题的影响。目前一切似乎都运行良好。

最佳答案

这是由 rvm1-capistrano3 gem 引起的问题。我快速浏览了 GitHub 上该 gem 的源代码,它正在做一些奇怪的事情,比如注册这样的钩子(Hook):

before :ruby, "deploy:updating"

这对我来说毫无意义;这意味着,如果您在部署开始时调用 rvm1:install:ruby (如 README 所建议),那么它将在部署完成之前触发 deploy:updating甚至开始了。通常应该在部署结束时触发。事实上,这个 gem 的功效令人惊讶。

跳过任务警告很重要。您的部署可能有效,但仍然令人担忧。我建议寻找 rvm1-capistrano3 gem 的替代品。

关于ruby-on-rails - Capistrano Rails 正在跳过任务 `deploy:updating',因为它之前已被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45136668/

相关文章:

ruby-on-rails - 参数查询

ruby-on-rails - rails : Why is bundle install frozen up by sassc 2. 4.0

ruby-on-rails - Capistrano 部署配置

ruby-on-rails - 无法使用 Capistrano 3.2.1 部署到远程服务器。验证 git repo 时出错

ruby-on-rails - 我的 Capistrano 没有设置 RAILS_ENV 变量

mysql - 使用 BCrypt 进行身份验证在使用 mysql 数据库时不保存 hashed_pa​​ssword

ruby-on-rails - bundle 执行 rake Assets :precompile

ruby-on-rails - 在没有模型的情况下访问 ActiveRecord 关联

ruby-on-rails - 如何防止 capistrano 覆盖用户在自己文件夹中上传的文件?

ruby-on-rails - 如何使用 rbenv 在 capistrano 中设置 ruby​​ 版本