Ruby 执行';尾部-f';使用Capistrano 3时,不将任何内容导入输出
我的Capistrano任务如下所示:Ruby 执行';尾部-f';使用Capistrano 3时,不将任何内容导入输出,ruby,capistrano,tail,Ruby,Capistrano,Tail,我的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请求,但没有显示任何内容。我百分之百地确信它不会以某种方式通过管道传输数据(我已经验证了它-日志文件会在远程更新),因此它不会显示任何内容。我错过什么了吗
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请求,但没有显示任何内容。我百分之百地确信它不会以某种方式通过管道传输数据(我已经验证了它-日志文件会在远程更新),因此它不会显示任何内容。我错过什么了吗?
应用程序角色包含在阶段配置中。Mmmmmmm…,请检查文件系统中的权限。运行任务的用户应具有读取文件的权限 您可以尝试chmod o+r logfile.log
在这里,您授予任何人读取该文件的权限(用于调试目的)。我找到了解决问题的方法。我不记得在哪里找到了解决方案,但通过使用伪tty强制分配(即
-t
)实例化ssh连接,以原始方式执行该命令,使其正常工作。这将使阻塞请求(如tail-f
工作)。正如man
页面在-t
选项上所述:
这可用于在远程机器上执行任意基于屏幕的程序,
这可能非常有用
您需要将capistrano详细级别设置为
DEBUG
,以查看任何流式输出。我在宝石中找到了解决方案;看
权限设置正确。该文件具有
-rw-r--r--
权限,因此任何人都可以读取它。嘿@CMaresh不起作用,我在Capistrano3中使用了这段代码,当您在deploy.rb
中设置调试日志记录级别运行capistrano时,它是否起作用?尝试在您的deploy.rb
中添加set:log\u level,:debug
,以确保跟踪能够自行工作。
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
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