Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/diaspora/diaspora.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/config
diff options
context:
space:
mode:
authorDennis Schubert <mail@dennis-schubert.de>2022-09-09 05:33:37 +0300
committerDennis Schubert <mail@dennis-schubert.de>2022-09-09 05:33:37 +0300
commit97cfc80a1fe6b712d15c13081cc938d3650fbdb1 (patch)
tree7a391584558791deb499babe54d9bd5a5e54c756 /config
parentbb80ca33948a7b728cb9083d090c4f8fddbbaec2 (diff)
Replace Unicorn with Puma
… and drop the single_process_mode. See the included Changelog entry for full details on what this change means.
Diffstat (limited to 'config')
-rw-r--r--config/defaults.yml13
-rw-r--r--config/diaspora.toml.example34
-rw-r--r--config/eye.rb37
-rw-r--r--config/initializers/sidekiq.rb10
-rw-r--r--config/puma.rb47
-rw-r--r--config/unicorn.rb48
6 files changed, 73 insertions, 116 deletions
diff --git a/config/defaults.yml b/config/defaults.yml
index 49e2d3ccf..9680f358c 100644
--- a/config/defaults.yml
+++ b/config/defaults.yml
@@ -11,7 +11,6 @@ defaults:
certificate_authorities:
redis:
require_ssl: true
- single_process_mode: false
sidekiq:
concurrency: 5
retry: 10
@@ -40,14 +39,12 @@ defaults:
sql: false
federation: false
server:
- listen: '0.0.0.0:3000'
+ listen: "tcp://127.0.0.1:3000"
rails_environment: 'development'
pid: "tmp/pids/web.pid"
stderr_log:
stdout_log:
- unicorn_worker: 2
- unicorn_timeout: 90
- embed_sidekiq_worker: false
+ web_timeout: 90
sidekiq_workers: 1
map:
mapbox:
@@ -179,23 +176,19 @@ development:
environment:
assets:
serve: true
- single_process_mode: true
require_ssl: false
logging:
debug:
sql: true
- server:
- unicorn_worker: 1
settings:
autofollow_on_join: false
autofollow_on_join_user: ''
production:
server:
- listen: 'unix:tmp/diaspora.sock'
+ listen: 'unix://tmp/diaspora.sock'
test:
environment:
url: 'http://localhost:9887/'
- single_process_mode: true
require_ssl: false
assets:
serve: true
diff --git a/config/diaspora.toml.example b/config/diaspora.toml.example
index 6304fb3fe..6401fc043 100644
--- a/config/diaspora.toml.example
+++ b/config/diaspora.toml.example
@@ -54,14 +54,6 @@
## Do not change this default unless you are sure!
#require_ssl = true
-## Single-process mode (default=false).
-## If set to true, Diaspora will work with just the appserver (Unicorn by
-## default) running. However, this makes it quite slow as intensive jobs
-## must be run all the time inside the request cycle. We strongly
-## recommended you leave this disabled for production setups.
-## Set to true to enable.
-#single_process_mode = false
-
## Set redirect URL for an external image host (Amazon S3 or other).
## If hosting images for your pod on an external server (even your own),
## add its URL here. All requests made to images under /uploads/images
@@ -162,12 +154,12 @@
## Settings affecting how ./script/server behaves.
[configuration.server]
-## Where the appserver should listen to (default="unix:tmp/diaspora.sock")
-#listen = "unix:tmp/diaspora.sock"
-#listen = "unix:/run/diaspora/diaspora.sock"
-#listen = "127.0.0.1:3000"
+## Where the appserver should listen to (default="unix://tmp/diaspora.sock")
+#listen = "unix://tmp/diaspora.sock"
+#listen = "unix:///run/diaspora/diaspora.sock"
+#listen = "tcp://127.0.0.1:3000"
-## Set the path for the PID file of the unicorn master process (default=tmp/pids/web.pid)
+## Set the path for the PID file of the web master process (default=tmp/pids/web.pid)
#pid = "tmp/pids/web.pid"
## Rails environment (default="development").
@@ -175,23 +167,15 @@
## Change this to "production" if you wish to run a production environment.
#rails_environment = "production"
-## Write unicorn stderr and stdout log.
-#stderr_log = "log/unicorn-stderr.log"
-#stdout_log = "log/unicorn-stdout.log"
-
-## Number of Unicorn worker processes (default=2).
-## Increase this if you have many users.
-#unicorn_worker = 2
+## Write web stderr and stdout log.
+#stderr_log = "log/web-stderr.log"
+#stdout_log = "log/web-stdout.log"
## Number of seconds before a request is aborted (default=90).
## Increase if you get empty responses, or if large image uploads fail.
## Decrease if you're under heavy load and don't care if some
## requests fail.
-#unicorn_timeout = 90
-
-## Embed a Sidekiq worker inside the unicorn process (default=false).
-## Useful for minimal Heroku setups.
-#embed_sidekiq_worker = false
+#web_timeout = 90
## Number of Sidekiq worker processes (default=1).
## In most cases it is better to
diff --git a/config/eye.rb b/config/eye.rb
index 20dfe9c86..94ded11c5 100644
--- a/config/eye.rb
+++ b/config/eye.rb
@@ -14,39 +14,30 @@ Eye.application("diaspora") do
stderr "log/eye_processes_stderr.log"
process :web do
- unicorn_command = "bin/bundle exec unicorn -c config/unicorn.rb"
-
- if rails_env == "production"
- start_command "#{unicorn_command} -D"
- daemonize false
- restart_command "kill -USR2 {PID}"
- restart_grace 10.seconds
- else
- start_command unicorn_command
- daemonize true
- end
+ web_command = "bin/puma -C config/puma.rb"
+
+ start_command web_command
+ daemonize true
+ restart_command "kill -USR2 {PID}"
+ restart_grace 10.seconds
pid_file AppConfig.server.pid.get
stop_signals [:TERM, 10.seconds]
- env "PORT" => ENV["PORT"]
-
monitor_children do
stop_command "kill -QUIT {PID}"
end
end
group :sidekiq do
- with_condition(!AppConfig.environment.single_process_mode?) do
- AppConfig.server.sidekiq_workers.to_i.times do |i|
- i += 1
-
- process "sidekiq#{i}" do
- start_command "bin/bundle exec sidekiq"
- daemonize true
- pid_file "tmp/pids/sidekiq#{i}.pid"
- stop_signals [:USR1, 0, :TERM, 10.seconds, :KILL]
- end
+ AppConfig.server.sidekiq_workers.to_i.times do |i|
+ i += 1
+
+ process "sidekiq#{i}" do
+ start_command "bin/bundle exec sidekiq"
+ daemonize true
+ pid_file "tmp/pids/sidekiq#{i}.pid"
+ stop_signals [:USR1, 0, :TERM, 10.seconds, :KILL]
end
end
end
diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb
index 104e94a82..9770db3ee 100644
--- a/config/initializers/sidekiq.rb
+++ b/config/initializers/sidekiq.rb
@@ -3,16 +3,6 @@
require "sidekiq_middlewares"
require "sidekiq/middleware/i18n"
-# Single process-mode
-if AppConfig.environment.single_process_mode? && !Rails.env.test?
- if Rails.env.production?
- warn "WARNING: You are running Diaspora in production without Sidekiq"
- warn " workers turned on. Please set single_process_mode to false in"
- warn " config/diaspora.toml."
- end
- require "sidekiq/testing/inline"
-end
-
Sidekiq.configure_server do |config|
config.redis = AppConfig.get_redis_options
diff --git a/config/puma.rb b/config/puma.rb
new file mode 100644
index 000000000..a11c0c0f1
--- /dev/null
+++ b/config/puma.rb
@@ -0,0 +1,47 @@
+# frozen_string_literal: true
+
+require_relative "load_config"
+
+pidfile AppConfig.server.pid.get
+bind AppConfig.server.listen.get
+
+worker_timeout AppConfig.server.web_timeout.to_i
+
+if AppConfig.server.stdout_log? || AppConfig.server.stderr_log?
+ stdout_redirect AppConfig.server.stdout_log? ? AppConfig.server.stdout_log.get : "/dev/null",
+ AppConfig.server.stderr_log? ? AppConfig.server.stderr_log.get : "/dev/null"
+end
+
+# In general, running Puma in cluster-mode is one of those very rare setups
+# that's only relevant in *huge* scale. However, starting 1 worker runs Puma in
+# cluster mode, with a single worker. This means you get to pay all the memory
+# overhead of spawning in "cluster mode", but you don't get any performance
+# benefits. This makes no sense. Setting "workers = 0" explicitly turns off
+# cluster mode.
+#
+# For more details and further references, see
+# https://github.com/puma/puma/commit/81d26e91b777ab120e8f52d45385f0e018438ba4
+workers 0
+
+preload_app!
+
+before_fork do
+ # we're preloading app in production, so force-reconenct the DB
+ ActiveRecord::Base.connection_pool.disconnect!
+
+ # drop the Redis connection
+ Sidekiq.redis {|redis| redis.client.disconnect }
+end
+
+on_worker_boot do
+ # reopen logfiles to obtain a new file descriptor
+ Logging.reopen
+
+ ActiveSupport.on_load(:active_record) do
+ # we're preloading app in production, so reconnect to DB
+ ActiveRecord::Base.establish_connection
+ end
+
+ # We don't generate uuids in the frontend, but let's be on the safe side
+ UUID.generator.next_sequence
+end
diff --git a/config/unicorn.rb b/config/unicorn.rb
deleted file mode 100644
index ac2120b65..000000000
--- a/config/unicorn.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-# frozen_string_literal: true
-
-require_relative "load_config"
-
-port = ENV["PORT"]
-port = port && !port.empty? ? port.to_i : nil
-
-listen port || AppConfig.server.listen.get unless RACKUP[:set_listener]
-pid AppConfig.server.pid.get
-worker_processes AppConfig.server.unicorn_worker.to_i
-timeout AppConfig.server.unicorn_timeout.to_i
-stderr_path AppConfig.server.stderr_log.get if AppConfig.server.stderr_log?
-stdout_path AppConfig.server.stdout_log.get if AppConfig.server.stdout_log?
-
-preload_app true
-@sidekiq_pid = nil
-
-before_fork do |_server, _worker|
- ActiveRecord::Base.connection.disconnect! # preloading app in master, so reconnect to DB
-
- # disconnect redis if in use
- Sidekiq.redis(&:close) unless AppConfig.environment.single_process_mode?
-
- @sidekiq_pid ||= spawn("bin/bundle exec sidekiq") if AppConfig.server.embed_sidekiq_worker?
-end
-
-after_fork do |server, worker|
- Logging.reopen # reopen logfiles to obtain a new file descriptor
-
- ActiveRecord::Base.establish_connection # preloading app in master, so reconnect to DB
-
- # We don't generate uuids in the frontend, but let's be on the safe side
- UUID.generator.next_sequence
-
- # Check for an old master process from a graceful restart
- old_pid = "#{AppConfig.server.pid.get}.oldbin"
-
- if File.exist?(old_pid) && server.pid != old_pid
- begin
- # Remove a worker from the old master when we fork a new one (TTOU)
- # Except for the last worker forked by this server, which kills the old master (QUIT)
- signal = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
- Process.kill(signal, File.read(old_pid).to_i)
- rescue Errno::ENOENT, Errno::ESRCH
- # someone else did our job for us
- end
- end
-end