我在使用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/