My solution is to sandblast and repaint.
I've found that epoxy base paint is best for two reasons, first on visible parts you can use epoxy filler on it, and secondly you can work each area after another before final coats. It prevents rust for some time if not exposed to elements.
It is sad but each seam should be opened and cleaned.
At best it is messy and laboursome work . Other methods so far are just lost battles against time.
There is also promising pant product called ZINGA made in Begium.
Works fine on rough surface. It is 96% zinc and provides cathodic protection, can be applied on rusted surface (of course not on flaking rust).