我有一个自定义的Capistrano任务。我需要在bundler install
之前运行它,以确保mini_racer
正确安装。定义如下:
# this will update gcc to a 4.8+, a version usable by mini_racer
task :enable_devtools_2 do
on roles(:web) do
execute :scl, :enable, "devtoolset-2", :bash
execute :gcc, "-v"
end
end
before "bundler:install", "enable_devtools_2"
但是,当我运行deploy
命令时,执行此步骤时它将挂起:
00:22 enable_devtools_2
01 scl enable devtoolset-2 bash
我应该如何进行调试?当然,当我手动ssh进入框并运行命令时,此方法有效。
编辑:当我转到Capistrano文档Why does something work in my SSH session, but not in Capistrano?时,可以运行一些自定义查询:
task :query_interactive do
on roles(:web) do
info capture("[[ $- == *i* ]] && echo 'Interactive' || echo 'Not interactive'")
end
end
task :query_login do
on roles(:web) do
info capture("shopt -q login_shell && echo 'Login shell' || echo 'Not login shell'")
end
end
我定义了这些,运行了它们,并得到以下输出。当然,我还不知道该怎么办:
% cap staging query_interactive
00:00 query_interactive
Not interactive
% cap staging query_login
00:00 query_login
Not login shell