Формат gzip использует нижний колонтитул, который содержит контрольные суммы для ранее сжатых данных.Как только нижний колонтитул достигнут, больше не может быть больше данных для того же потока данных gziped.
Кажется, что читатель Ruby Gzip только что завершил чтение после первого обнаруженного нижнего колонтитула, что технически правильно, хотя многиереализации вызывают ошибку, если есть еще данные.Я не знаю точно о поведении Ruby здесь.
Дело в том, что вы не можете просто объединить необработанные байтовые потоки и ожидать, что все будет работать.Вы должны адаптировать потоки и переписать верхние и нижние колонтитулы.См. этот вопрос для деталей.
Или вы можете распаковать потоки, объединить их и повторно сжать, но это, очевидно, создает некоторые накладные расходы ...