我的Capistrano任务看起来像这样:
desc "tail log file"
task :tail do
on roles(:app) do
execute "tail -f #{shared_path}/log/#{fetch(:log_file)}.log"
end
end
当我运行任务时,它继续阻塞tail -f请求,但它什么也没显示。我百分之百肯定它不会以某种方式管道数据(我已经验证了它 - 日志文件在遥控器上更新)因此它什么都没显示。我错过了什么? app角色包含在舞台配置中。
答案 0 :(得分:0)
Mmmmmmm ...,检查文件系统中的权限。运行任务的用户应具有读取文件的权限。
您可以尝试chmod o + r logfile.log
在这里,您可以向该文件上的任何人提供读取权限(用于调试目的)。
答案 1 :(得分:0)
我找到了解决问题的解决方法/解决方案。我不记得我在哪里找到了解决方案,但是通过使用伪tty强制分配实例化ssh连接来执行命令 rawly (-t
让它工作。这将获得tail -f
之类的阻止请求。正如man
页面上-t
选项所述:
这可用于在远程计算机上执行任意基于屏幕的程序, 这可能非常有用......
def execute_interactively(command)
user = fetch(:user)
port = fetch(:port)
cmd = "ssh -l #{user} #{host} -p #{port} -t 'cd #{deploy_to}/current && #{command}'"
exec cmd
end
答案 2 :(得分:0)
您需要将capistrano详细级别设置为DEBUG
以查看任何流式输出。我在capistrano3-taillog宝石中找到了解决方案;见taillog.cap。
desc "tail log file"
task :tail do
on roles(:app) do
with_verbosity Logger::DEBUG do
execute "tail -f #{shared_path}/log/#{fetch(:log_file)}.log"
end
end
end
def with_verbosity(output_verbosity)
old_verbosity = SSHKit.config.output_verbosity
begin
SSHKit.config.output_verbosity = output_verbosity
yield
ensure
SSHKit.config.output_verbosity = old_verbosity
end
end