* [ANN] yahns 1.16.0 -_- sleepy app server for Ruby
@ 2018-08-06 1:32 4% Eric Wong
0 siblings, 0 replies; 2+ results
From: Eric Wong @ 2018-08-06 1:32 UTC (permalink / raw)
To: ruby-talk, yahns-public
A Free Software, multi-threaded, non-blocking network
application server designed for low _idle_ power consumption.
It is primarily optimized for applications with occasional users
which see little or no traffic. yahns currently hosts Rack/HTTP
applications, but may eventually support other application
types. Unlike some existing servers, yahns is extremely
sensitive to fatal bugs in the applications it hosts.
* git clone https://yhbt.net/yahns.git
* https://yhbt.net/yahns/README
* https://yhbt.net/yahns/NEWS.atom.xml (supported by most "RSS" readers)
* we only accept plain-text email yahns-public@yhbt.net
* and archive all the mail we receive: https://yhbt.net/yahns-public/
* nntp://news.public-inbox.org/inbox.comp.lang.ruby.yahns
lrg nabgure ubeevoyl-anzrq freire :>
Changes:
yahns 1.16.0
This release fixes warnings for users combining Rack::Deflater
with HTTPS support:
https://yhbt.net/yahns-public/20180714005630.11812-1-e@80x24.org/
yahns-rackup(1) users may not specify "-O listen=inherit"
when spawning from systemd. The "listen" directive may
be omitted entirely from the yahns-config(5) files.
A few other cleanups and nothing interesting, otherwise.
20 yawn-worthy changes since v1.15.0 (2017-03-23):
config: more descriptive variable name
proxy_pass: comment explaining what rack.hijack calls
USR2 upgrades may use Process.spawn for vfork
avoid Thread#[] and Thread#[]= across threads
gemspec: declare Ruby 2.0+ dependency, here
test_bin: SO_KEEPALIVE value only needs to be true
rackup_handler: remove unnecessary branch
test_bin: use RbConfig.ruby for non-standard names
allow omitting specifying socket name when inheriting listen socket
server: fix incomplete comment about SSLContext#setup
test_rack_env: additional test for Rack environment
test: allow setting TAIL env to watch error logs
fix some unused variables
tests: thread-safety fixes
test/server_helper: describe reason for termination
test/test_ssl: set SSLContext#security_level=0
doc: https:// URLs instead of git://
http_client: clear backtrace on "wrong version number" in OpenSSL
openssl_client: do not attempt writes after SystemCallError
use IO#pread if available in Ruby 2.5
*ZZZZZZ*
Please note the disclaimer:
yahns is extremely sensitive to fatal bugs in the apps it hosts. There
is no (and never will be) any built-in "watchdog"-type feature to kill
stuck processes/threads. Each yahns process may be handling thousands
of clients; unexpectedly killing the process will abort _all_ of those
connections. Lives may be lost!
yahns hackers are not responsible for your application/library bugs.
Use an application server which is tolerant of buggy applications
if you cannot be bothered to fix all your fatal bugs.
^ permalink raw reply [relevance 4%]
* [PATCH] USR2 upgrades may use Process.spawn for vfork
@ 2017-03-27 20:59 7% Eric Wong
0 siblings, 0 replies; 2+ results
From: Eric Wong @ 2017-03-27 20:59 UTC (permalink / raw)
To: yahns-public
Remove false statements about close-on-exec being cleared in the
parent process (verified via strace) and refactor the code to
take full advantage of options for Process.spawn and Process.exec.
This avoids unnecessary CoW traffic for the common case where
before_exec is unset.
---
lib/yahns/server.rb | 33 ++++++++++++++++-----------------
1 file changed, 16 insertions(+), 17 deletions(-)
diff --git a/lib/yahns/server.rb b/lib/yahns/server.rb
index 861b919..43caae6 100644
--- a/lib/yahns/server.rb
+++ b/lib/yahns/server.rb
@@ -237,24 +237,23 @@ def reexec
end
end
- # We cannot use Process.spawn here because of redirects + close-on-exec
- # We must keep close_on_exec=true in the parent process and only set
- # close_on_exec=false in the child. There must be no opportunity
- # for the user app to ever get a listen socket with close_on_exec=false
- @reexec_pid = fork do
- redirects = {}
- @listeners.each do |sock|
- sock.close_on_exec = false
- redirects[sock.fileno] = sock
+ opt = {}
+ @listeners.each { |sock| opt[sock.fileno] = sock }
+ env = ENV.to_hash
+ env['YAHNS_FD'] = opt.keys.join(',')
+ opt[:close_others] = true
+ cmd = [ Yahns::START[0] ].concat(Yahns::START[:argv])
+ dir = @config.value(:working_directory) || Yahns::START[:cwd]
+ @logger.info "spawning #{cmd.inspect} (in #{dir})"
+ @reexec_pid = if @before_exec
+ fork do
+ Dir.chdir(dir)
+ @before_exec.call(cmd)
+ exec(env, *cmd, opt)
end
- ENV['YAHNS_FD'] = redirects.keys.join(',')
- redirects[:close_others] = true
- Dir.chdir(@config.value(:working_directory) || Yahns::START[:cwd])
- cmd = [ Yahns::START[0] ].concat(Yahns::START[:argv])
- @logger.info "executing #{cmd.inspect} (in #{Dir.pwd})"
- @before_exec.call(cmd) if @before_exec
- cmd << redirects
- exec(*cmd)
+ else
+ opt[:chdir] = dir
+ spawn(env, *cmd, opt)
end
end
--
EW
^ permalink raw reply related [relevance 7%]
Results 1-2 of 2 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2017-03-27 20:59 7% [PATCH] USR2 upgrades may use Process.spawn for vfork Eric Wong
2018-08-06 1:32 4% [ANN] yahns 1.16.0 -_- sleepy app server for Ruby Eric Wong
Code repositories for project(s) associated with this public inbox
https://yhbt.net/yahns.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).