Your application object (the lambda that that you pass to run
) does not conform to the Rack specification. According to the specification, it must accept exactly 1 argument, but your lambda accepts none and so you get an ArgumentError.
Phusion Passenger implements Rack differently than Thin does. Because the Rack specification does not specify how spec violations should be handled, each server handles it differently. This is why some (wrong) code which works on Thin, may not work on Phusion Passenger, and vice versa.