Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 执行';尾部-f';使用Capistrano 3时,不将任何内容导入输出_Ruby_Capistrano_Tail - Fatal编程技术网

Ruby 执行';尾部-f';使用Capistrano 3时,不将任何内容导入输出

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请求,但没有显示任何内容。我百分之百地确信它不会以某种方式通过管道传输数据(我已经验证了它-日志文件会在远程更新),因此它不会显示任何内容。我错过什么了吗

我的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请求,但没有显示任何内容。我百分之百地确信它不会以某种方式通过管道传输数据(我已经验证了它-日志文件会在远程更新),因此它不会显示任何内容。我错过什么了吗?
应用程序角色包含在阶段配置中。

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