Capistrano没有超越'角色(:app)'?

时间:2017-07-12 16:46:01

标签: ruby-on-rails capistrano

我目前正在尝试编写一个自定义rake任务,如下所示:

namespace :import do
  desc 'Import excel file'
  task :excel, :filepath do |task, args|
    on roles(:app) do
      file_path = args[:filepath]
      file_name = file_path.split('/').last
      home_path = "/var/www/my_app/current/"
      server_path = home_path+file_name
      upload!(file_path, "#{server_path}")
      run "cd #{current_path} && bundle exec rake 'excel:import[#{server_path}]' RAILS_ENV=#{rails_env}"
    end
  end
end

现在,当我输入cap production import:excel[/path/to/file.txt]时,没有任何反应。我发现它没有进入on roles(:app) do块而是跳过它。删除该行会引发undefined method upload!错误。

有谁知道为什么会跳过它?或者我可以在没有upload!阻止的情况下使用on roles吗?

更新:

role :app, %w{master@1.2.3.4}
role :web, %w{master@1.2.3.4}
role :db,  %w{master@1.2.3.4}
server '1.2.3.4', user: 'master', roles: %w{web app}, my_property: :my_value

3 个答案:

答案 0 :(得分:0)

尝试使用--trace运行您的任务以获取有关正在发生的事情的更多信息,添加一些puts语句也会有所帮助。

答案 1 :(得分:0)

server 'x.x.x.x', user: 'username', roles: %w(web app jobs db rollbar whenever)

set :user, 'username'
set :branch, ENV.fetch('BRANCH', 'master')
set :rails_env, 'qa'
set :server_name, 'qa'

set :nginx_server_name, '_'
set :nginx_default_server, false
set :deploy_to, "/home/rails/#{fetch(:application)}-#{fetch(:server_name)}"

这是我们使用的条带化部署文件的示例。我不知道前3行的声明是什么,我从来没有见过。通常,您只需使用服务器声明定义行内的角色。

答案 2 :(得分:0)

无论出于何种原因它现在都有效,我只是没有触及代码几天,现在它可以工作了。 ♂️