diff --git a/lib/taskjuggler/daemon/Daemon.rb b/lib/taskjuggler/daemon/Daemon.rb index d8c06246..193bae62 100644 --- a/lib/taskjuggler/daemon/Daemon.rb +++ b/lib/taskjuggler/daemon/Daemon.rb @@ -69,7 +69,7 @@ def start # We no longer have a controlling terminal, so these are useless. $stdin.reopen('/dev/null') - $stdout.reopen(StringIO.new) + $stdout.reopen('/dev/null', 'a') $stderr.reopen($stdout) info('daemon_pid', diff --git a/lib/taskjuggler/daemon/ReportServlet.rb b/lib/taskjuggler/daemon/ReportServlet.rb index d091bd6c..57c35d3c 100644 --- a/lib/taskjuggler/daemon/ReportServlet.rb +++ b/lib/taskjuggler/daemon/ReportServlet.rb @@ -105,9 +105,13 @@ def generateReport(projectId, reportId, attributes) # text from the report server. This buffer will contain the generated # report as HTML encoded text. They will be send via DRb, so we have to # extend them with DRbUndumped. - stdOut = StringIO.new('') + # + # Note: In Ruby 4.0+, StringIO.new('') unexpectedly creates a read-only + # buffer in the web server context. Using StringIO.new without arguments + # avoids this issue. Root cause not yet identified. + stdOut = StringIO.new stdOut.extend(DRbUndumped) - stdErr = StringIO.new('') + stdErr = StringIO.new stdErr.extend(DRbUndumped) begin @@ -119,6 +123,7 @@ def generateReport(projectId, reportId, attributes) end error('rs_io_connect_failed', "Can't connect IO: #{$!}") + return end # Ask the ReportServer to generate the reports with the provided ID.