diff --git a/Gemfile b/Gemfile index 1f9a93e5d..d8ca7d45e 100644 --- a/Gemfile +++ b/Gemfile @@ -54,14 +54,6 @@ gem 'puma_worker_killer' gem "rack-timeout", require: "rack/timeout/base" gem "parallel" -group :production do - gem 'unicorn', :platforms => :ruby -end - -group :production do - gem 'unicorn-worker-killer' -end - group :development do gem 'rubocop', require: false gem 'rubocop-rails', require: false diff --git a/Gemfile.lock b/Gemfile.lock index 915c0bee8..d770a39aa 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -241,7 +241,6 @@ GEM jmespath (1.4.0) json (2.5.1) jwt (2.2.3) - kgio (2.11.4) kramdown (2.3.1) rexml kramdown-parser-gfm (1.1.0) @@ -350,7 +349,6 @@ GEM rake (>= 0.13) thor (~> 1.0) rainbow (3.0.0) - raindrops (0.19.2) rake (13.0.6) rakismet (1.5.4) rb-fsevent (0.11.0) @@ -460,12 +458,6 @@ GEM unf_ext unf_ext (0.0.7.7) unicode-display_width (2.0.0) - unicorn (6.0.0) - kgio (~> 2.6) - raindrops (~> 0.7) - unicorn-worker-killer (0.4.5) - get_process_mem (~> 0) - unicorn (>= 4, < 7) view_component (2.40.0) activesupport (>= 5.0.0, < 8.0) method_source (~> 1.0) @@ -562,8 +554,6 @@ DEPENDENCIES stripe-ruby-mock terminal-table tzinfo-data - unicorn - unicorn-worker-killer view_component webpacker (= 6.0.0.beta.6) diff --git a/bin/unicorn b/bin/unicorn deleted file mode 100755 index d3f6570b5..000000000 --- a/bin/unicorn +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: true - -# -# This file was generated by Bundler. -# -# The application 'unicorn' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require "pathname" -ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", - Pathname.new(__FILE__).realpath) - -bundle_binstub = File.expand_path("../bundle", __FILE__) - -if File.file?(bundle_binstub) - if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/ - load(bundle_binstub) - else - abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. -Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") - end -end - -require "rubygems" -require "bundler/setup" - -load Gem.bin_path("unicorn", "unicorn") diff --git a/config.ru b/config.ru index a0a19dff8..4a3c09a68 100644 --- a/config.ru +++ b/config.ru @@ -2,16 +2,5 @@ require_relative "config/environment" -if defined?(Unicorn) && Rails.env.production? - # Unicorn self-process killer - require 'unicorn/worker_killer' - - # Max requests per worker - use Unicorn::WorkerKiller::MaxRequests, 5_000, 10_000 - - # Max memory size (RSS) per worker - # use Unicorn::WorkerKiller::Oom, (192*(1024**2)), (256*(1024**2)) -end - run Rails.application Rails.application.load_server diff --git a/config/unicorn/README.md b/config/unicorn/README.md deleted file mode 100644 index 9e6b1ed42..000000000 --- a/config/unicorn/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# Unicorn - -This directory contains configuration files for Unicorn, the web server that Danbooru uses in production. - -# See also - -* [config/puma.rb](../puma.rb) - -# External links - -* https://yhbt.net/unicorn/README.html -* https://github.com/defunkt/unicorn \ No newline at end of file diff --git a/config/unicorn/development.rb b/config/unicorn/development.rb deleted file mode 100644 index 2003277cc..000000000 --- a/config/unicorn/development.rb +++ /dev/null @@ -1,25 +0,0 @@ -# Set your full path to application. -app_path = "/var/www/danbooru2/current" - -# Set unicorn options -worker_processes 2 - -preload_app false -timeout 180 -listen "127.0.0.1:9000" - -# Spawn unicorn master worker for user apps (group: apps) -user 'danbooru', 'danbooru' - -# Fill path to your app -working_directory app_path - -# Should be 'production' by default, otherwise use other env -rails_env = ENV['RAILS_ENV'] || 'production' - -# Log everything to one file -stderr_path "log/unicorn.log" -stdout_path "log/unicorn.log" - -# Set master PID location -pid "#{app_path}/tmp/pids/unicorn.pid" diff --git a/config/unicorn/production.rb b/config/unicorn/production.rb deleted file mode 100644 index 1425d632e..000000000 --- a/config/unicorn/production.rb +++ /dev/null @@ -1,96 +0,0 @@ -# Set your full path to application. -app_path = "/var/www/danbooru2/current" - -# Set unicorn options -worker_processes 30 - -timeout 60 -# listen "127.0.0.1:9000", :tcp_nopush => true -listen "/tmp/.unicorn.sock", backlog: 1024 - -# Spawn unicorn master worker for user apps (group: apps) -user 'danbooru', 'danbooru' - -# Fill path to your app -working_directory app_path - -# Should be 'production' by default, otherwise use other env -rails_env = ENV['RAILS_ENV'] || 'production' - -# Log everything to one file -stderr_path "/dev/null" -stdout_path "/dev/null" - -# Set master PID location -pid "#{app_path}/tmp/pids/unicorn.pid" - -# combine Ruby 2.0.0+ with "preload_app true" for memory savings -preload_app true - -# Enable this flag to have unicorn test client connections by writing the -# beginning of the HTTP headers before calling the application. This -# prevents calling the application for connections that have disconnected -# while queued. This is only guaranteed to detect clients on the same -# host unicorn runs on, and unlikely to detect disconnects even on a -# fast LAN. -check_client_connection false - -# local variable to guard against running a hook multiple times -run_once = true - -before_fork do |server, worker| - # the following is highly recomended for Rails + "preload_app true" - # as there's no need for the master process to hold a connection - defined?(ActiveRecord::Base) && ActiveRecord::Base.connection.disconnect! - - # Occasionally, it may be necessary to run non-idempotent code in the - # master before forking. Keep in mind the above disconnect! example - # is idempotent and does not need a guard. - if run_once - # do_something_once_here ... - run_once = false # prevent from firing again - end - - # The following is only recommended for memory/DB-constrained - # installations. It is not needed if your system can house - # twice as many worker_processes as you have configured. - # - # # This allows a new master process to incrementally - # # phase out the old master process with SIGTTOU to avoid a - # # thundering herd (especially in the "preload_app false" case) - # # when doing a transparent upgrade. The last worker spawned - # # will then kill off the old master process with a SIGQUIT. - # old_pid = "#{server.config[:pid]}.oldbin" - # if old_pid != server.pid - # begin - # sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU - # Process.kill(sig, File.read(old_pid).to_i) - # rescue Errno::ENOENT, Errno::ESRCH - # end - # end - # - # Throttle the master from forking too quickly by sleeping. Due - # to the implementation of standard Unix signal handlers, this - # helps (but does not completely) prevent identical, repeated signals - # from being lost when the receiving process is busy. - sleep 0.25 -end - -after_fork do |server, worker| - if defined?(ActiveRecord::Base) - ActiveRecord::Base.establish_connection - end -end - -# This runs when we send unicorn a SIGUSR2 to do a hot restart. We need to -# clear out old BUNDLER_* and GEM_* environment variables, otherwise the new -# worker will still use the old Gemfile from the previous deployment, which -# will cause mysterious problems with libraries. BUNDLER_GEMFILE is the main -# thing we need to clear, but we wipe everything for safety. -# -# https://bogomips.org/unicorn/Sandbox.html -# https://jamielinux.com/blog/zero-downtime-unicorn-restart-when-using-rbenv/ -before_exec do |server| - ENV.keep_if { |name, value| name.match?(/\A(RAILS_.*|UNICORN_.*|HOME)\z/) } - ENV["PATH"] = "#{ENV["HOME"]}/.rbenv/shims:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" -end diff --git a/config/unicorn/unicorn.rb b/config/unicorn/unicorn.rb deleted file mode 100644 index 755b80484..000000000 --- a/config/unicorn/unicorn.rb +++ /dev/null @@ -1,41 +0,0 @@ -require "dotenv" - -rails_env = ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'development' -Dotenv.load(".env.local", ".env.#{rails_env}", ".env") - -addr = ENV["UNICORN_LISTEN"] || "127.0.0.1:9000" -app_path = ENV["UNICORN_ROOT"] || Dir.pwd -instance = "unicorn-#{addr}" - -listen addr -worker_processes ENV["UNICORN_PROCESSES"].to_i || 1 -timeout ENV["UNICORN_TIMEOUT"].to_i || 90 - -user = ENV["UNICORN_USER"] || "danbooru" -group = ENV["UNICORN_GROUP"] || "danbooru" - -stderr_path ENV["UNICORN_LOG"] || "log/#{instance}.log" -stdout_path ENV["UNICORN_LOG"] || "log/#{instance}.log" - -working_directory app_path -pid ENV["UNICORN_PIDFILE"] || "#{app_path}/tmp/pids/#{instance}.pid" - -if rails_env == "production" - preload_app true - - before_fork do |server, worker| - ActiveRecord::Base.connection.disconnect! if defined?(ActiveRecord::Base) - - # Throttle the master from forking too quickly by sleeping. Due - # to the implementation of standard Unix signal handlers, this - # helps (but does not completely) prevent identical, repeated signals - # from being lost when the receiving process is busy. - sleep 1 - end - - after_fork do |server, worker| - ActiveRecord::Base.establish_connection if defined?(ActiveRecord::Base) - end -else - preload_app false -end diff --git a/script/install/nginx.danbooru.conf b/script/install/nginx.danbooru.conf index 7de5ac205..ecfae2444 100644 --- a/script/install/nginx.danbooru.conf +++ b/script/install/nginx.danbooru.conf @@ -53,6 +53,5 @@ server { } upstream app_server { - # server 127.0.0.1:9000; - server unix:/tmp/.unicorn.sock; + server 127.0.0.1:3000; }