From: Eric Wong <normalperson@yhbt.net>
To: unicorn list <mongrel-unicorn@rubyforge.org>
Cc: "godfat 真常" <godfat@gmail.com>
Subject: Re: About Unicorn Rack handler
Date: Wed, 4 Nov 2009 09:07:15 -0800 [thread overview]
Message-ID: <20091104170714.GC5282@dcvr.yhbt.net> (raw)
In-Reply-To: <56e58d960911040437g12cb6291rb19c2fe21cae834@mail.gmail.com>
"Lin Jen-Shin (aka godfat 真常)" <godfat@godfat.org> wrote:
> Hi,
>
> A couple days ago, I was trying to run Unicorn for Ramaze,
> and found that `Unicorn.run' didn't share the same interface
> with other Rack handlers, i.e. `options[:Host]' and `options[:Port]'
>
> Because of this, I can't just use:
>
> Rack::Handler.register('unicorn', 'Unicorn')
>
> And invoke this:
>
> Ramaze.start(:adapter => 'unicorn', :port => 8080)
>
> To address this, I added a simple wrapper in
> Innate (which is the core of Ramaze):
>
> http://github.com/godfat/innate/commit/9d607f41fdeeca366a9a07155e685ae2605c7025
>
> In short, simply hack the config to:
>
> {:listeners => ["#{config[:Host]}:#{config[:Port]}"]}
>
> Should we adapt to this interface in Unicorn::Configurator,
> or provide an additional Rack handle to adapt to this,
> or maintain this Rack handler in Rack repository, just like the others?
> http://github.com/rack/rack/tree/master/lib/rack/handler
I think making Unicorn.run add to :listeners if :Host or :Port are set
will work. I'm not sure if launching Unicorn directly from `rackup' can
ever work right without being too intrusive to the other servers, so
having a Unicorn Rack handler in distributed with Rack would't make
sense. Unicorn needs to capture ARGV (before option parsing) and parse
its own config file, neither of which is doable out-of-the-box with
rackup.
Does something like this work? (not tested).
diff --git a/lib/unicorn.rb b/lib/unicorn.rb
index 0f2b597..d4a00e0 100644
--- a/lib/unicorn.rb
+++ b/lib/unicorn.rb
@@ -17,6 +17,14 @@ module Unicorn
class << self
def run(app, options = {})
+ # compatibility with other interfaces (Ramaze)
+ host = options.delete(:Host)
+ port = options.delete(:Port)
+ if host || port
+ port ||= Const::DEFAULT_PORT
+ host ||= Const::DEFAULT_HOST
+ (options[:listeners] ||= []) << "#{host}:#{port}"
+ end
HttpServer.new(app, options).start.join
end
end
On the other hand, does Innate make it possible to do transparent
upgrades (since rackup does not)? I'll look into it a bit more later...
--
Eric Wong
_______________________________________________
mongrel-unicorn mailing list
mongrel-unicorn@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-unicorn
next prev parent reply other threads:[~2009-11-04 17:07 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-04 12:37 About Unicorn Rack handler Lin Jen-Shin (aka godfat 真常)
2009-11-04 17:07 ` Eric Wong [this message]
2009-11-05 4:43 ` Lin Jen-Shin (aka godfat 真常)
2009-11-05 4:47 ` Lin Jen-Shin (aka godfat 真常)
2009-11-05 7:29 ` Eric Wong
2009-11-05 7:28 ` Eric Wong
2009-11-05 15:13 ` Lin Jen-Shin (aka godfat 真常)
2009-11-05 23:19 ` Eric Wong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://yhbt.net/unicorn/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20091104170714.GC5282@dcvr.yhbt.net \
--to=normalperson@yhbt.net \
--cc=godfat@gmail.com \
--cc=mongrel-unicorn@rubyforge.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://yhbt.net/unicorn.git/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).