I remember that this problem came up before but I can't find the answer.
I require a file this way:
#lib/tm/agent/server.rb
require 'tm/agent/server'
And, without calling the Listen class explicitly, its initialize
gets executed:
module Tm
module Agent
module Server
require 'goliath'
class Listen < Goliath::API
def initialize
puts "WHAT"
end
def response(env)
[200, {}, "Hello World"]
end
end
end #end Server
end #end Agent
end #end Tm
How do I avoid initializing the class on require?
This is due to a hook in the Goliath server that automatically starts a server when you run your script directly – it’s not a normal feature of Ruby.
To avoid it, don’t call
require 'goliath'
, but userequire 'goliath/api'
instead.