我目前正在尝试编写一个自定义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
答案 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)
无论出于何种原因它现在都有效,我只是没有触及代码几天,现在它可以工作了。 ♂️