Причина в том, что браузер фактически выполняет два отдельных HTTP-запроса.
Request: POST /
Response: 301 -> Location: /tmp
Request: GET /tmp
Response: ...
Два запроса означают два отдельных процесса, поэтому переменная экземпляра @data очищается после отправки первого ответа.
Если вы хотите сохранить информацию, вам необходимо использовать файлы cookie или сеансы, иначе передайте данные в строку запроса
post "/" do
test = params[:test]
redirect "/tmp?test=#{test}"
end
get "/tmp" do
puts params[:test]
end