[PATCH 1/2] core: switch to unicorn

Bráulio Bhavamitra braulio at eita.org.br
Thu Sep 10 12:45:00 BRT 2015


I would rename restart to reload, and on restart do a full restart
(stop/start), and on reload do the -USR2 signal.

without this it won't be possible to do a "real" restart

On Thu, Sep 10, 2015 at 12:36 PM Antonio Terceiro <terceiro at colivre.coop.br>
wrote:

> ---
>  Gemfile                 |  2 +-
>  config.ru               |  8 +++++++-
>  config/thin.yml.dist    | 13 -------------
>  config/unicorn.rb.dist  |  5 +++++
>  gitignore.example       |  2 +-
>  lib/noosfero/unicorn.rb | 20 ++++++++++++++++++++
>  script/development      | 19 +++++++++----------
>  script/production       | 27 ++++++++++++++++++++++-----
>  8 files changed, 65 insertions(+), 31 deletions(-)
>  delete mode 100644 config/thin.yml.dist
>  create mode 100644 config/unicorn.rb.dist
>  create mode 100644 lib/noosfero/unicorn.rb
>
> diff --git a/Gemfile b/Gemfile
> index 9df5fe6..eb6ef5b 100644
> --- a/Gemfile
> +++ b/Gemfile
> @@ -10,7 +10,7 @@ gem 'RedCloth',                 '~> 4.2.9'
>  gem 'will_paginate',            '~> 3.0.3'
>  gem 'ruby-feedparser',          '~> 0.7'
>  gem 'daemons',                  '~> 1.1.5'
> -gem 'thin',                     '~> 1.3.1'
> +gem 'unicorn',                  '~> 4.8'
>  gem 'nokogiri',                 '~> 1.5.5'
>  gem 'rake', :require => false
>  gem 'rest-client',              '~> 1.6.7'
> diff --git a/config.ru b/config.ru
> index 7cfb73b..62ec6b3 100644
> --- a/config.ru
> +++ b/config.ru
> @@ -1,4 +1,10 @@
>  # This file is used by Rack-based servers to start the application.
>
>  require ::File.expand_path('../config/environment',  __FILE__)
> -run Noosfero::Application
> +if ENV['RAILS_RELATIVE_URL_ROOT']
> +  map ENV['RAILS_RELATIVE_URL_ROOT'] do
> +    run Noosfero::Application
> +  end
> +else
> +  run Noosfero::Application
> +end
> diff --git a/config/thin.yml.dist b/config/thin.yml.dist
> deleted file mode 100644
> index 6c3a75d..0000000
> --- a/config/thin.yml.dist
> +++ /dev/null
> @@ -1,13 +0,0 @@
> ----
> -pid: tmp/pids/thin.pid
> -address: 127.0.0.1
> -user: noosfero
> -timeout: 30
> -port: 50000
> -log: log/thin.log
> -max_conns: 1024
> -servers: 1
> -max_persistent_conns: 512
> -environment: production
> -daemonize: true
> -chdir: /usr/share/noosfero
> diff --git a/config/unicorn.rb.dist b/config/unicorn.rb.dist
> new file mode 100644
> index 0000000..111693b
> --- /dev/null
> +++ b/config/unicorn.rb.dist
> @@ -0,0 +1,5 @@
> +listen "127.0.0.1:3000"
> +
> +worker_processes 1
> +
> +# vim: ft=ruby
> diff --git a/gitignore.example b/gitignore.example
> index 8dfe08e..abbc244 100644
> --- a/gitignore.example
> +++ b/gitignore.example
> @@ -10,7 +10,7 @@ config/session.secret
>  config/noosfero.yml
>  config/mongrel_cluster.yml
>  config/plugins
> -config/thin.yml
> +config/unicorn.rb
>  config/local.rb
>  index
>  locale
> diff --git a/lib/noosfero/unicorn.rb b/lib/noosfero/unicorn.rb
> new file mode 100644
> index 0000000..045340a
> --- /dev/null
> +++ b/lib/noosfero/unicorn.rb
> @@ -0,0 +1,20 @@
> +# our defaults
> +listen "0.0.0.0:3000"
> +pid 'tmp/pids/unicorn.pid'
> +
> +preload_app true
> +GC.respond_to?(:copy_on_write_friendly=) and
> +  GC.copy_on_write_friendly = true
> +
> +before_fork do |server, worker|
> +  ActiveRecord::Base.connection.disconnect! if
> defined?(ActiveRecord::Base)
> +end
> +
> +after_fork do |server, worker|
> +  ActiveRecord::Base.establish_connection if defined?(ActiveRecord::Base)
> +end
> +
> +# load local configuration file, if it exists
> +config = File.join(File.dirname(__FILE__), '../../config/unicorn.rb')
> +instance_eval(File.read(config), config) if File.exists?(config)
> +
> diff --git a/script/development b/script/development
> index e6125f8..de6f05e 100755
> --- a/script/development
> +++ b/script/development
> @@ -9,9 +9,9 @@ stop() {
>    ./script/delayed_job stop
>    ./script/feed-updater stop
>    whenever --clear-crontab
> -  if [ -f tmp/pids/thin.pid ]; then
> -    kill -9 $(cat tmp/pids/thin.pid)
> -    rm -f tmp/pids/thin.pid
> +  if [ -f tmp/pids/unicorn.pid ]; then
> +    kill -9 $(cat tmp/pids/unicorn.pid)
> +    rm -f tmp/pids/unicorn.pid
>    fi
>    exit
>  }
> @@ -20,18 +20,17 @@ start() {
>    rake db:abort_if_pending_migrations
>    ./script/feed-updater start
>    ./script/delayed_job start
> -  trap stop INT TERM
> +  trap stop INT TERM EXIT
>    whenever --write-crontab --set 'environment=development'
>    if [ -z "$RAILS_RELATIVE_URL_ROOT" ]; then
> -    rails s $@
> +    unicorn_rails --config-file lib/noosfero/unicorn.rb $@
>    else
>      mkdir -p log
>      touch log/development.log
> -    thin \
> -      --prefix "$RAILS_RELATIVE_URL_ROOT" \
> -      --pid tmp/pids/thin.pid \
> -      --daemonize \
> -      start
> +    unicorn_rails \
> +      --path "$RAILS_RELATIVE_URL_ROOT" \
> +      --config-file lib/noosfero/unicorn.rb \
> +      --daemonize
>      tail -n 0 -f log/development.log || true
>    fi
>  }
> diff --git a/script/production b/script/production
> index 3d706e3..9034ed1 100755
> --- a/script/production
> +++ b/script/production
> @@ -25,12 +25,29 @@ clear_cache() {
>    fi
>  }
>
> +app_server_start() {
> +  ruby -S bundle exec unicorn_rails \
> +    --config-file lib/noosfero/unicorn.rb \
> +    --env "$RAILS_ENV" \
> +    --daemonize
> +}
> +
> +app_server_stop() {
> +  # see unicorn_rails(1)
> +  kill -s QUIT $(cat tmp/pids/unicorn.pid)
> +}
> +
> +app_server_restart() {
> +  # see unicorn_rails(1)
> +  kill -s HUP $(cat tmp/pids/unicorn.pid)
> +}
> +
>  do_start() {
>    bundle exec rake db:migrate SCHEMA=/dev/null
>    clear_cache
>    environments_loop start
>    bundle exec whenever --write-crontab --set 'environment=production'
> -  ruby -S bundle exec thin -C config/thin.yml start
> +  app_server_start
>  }
>
>  do_stop() {
> @@ -39,8 +56,8 @@ do_stop() {
>    # back to stopping the daemons by manually reading their PID files,
> killing
>    # them and wiping the PID files.
>
> -  ruby -S bundle exec thin -C config/thin.yml stop ||
> -    stop_via_pid_file tmp/pids/thin.*.pid
> +  app_server_stop ||
> +    stop_via_pid_file tmp/pids/unicorn.pid
>
>    environments_loop stop ||
>      stop_via_pid_file tmp/pids/delayed_job.pid tmp/pids/delayed_job.*.pid
> tmp/pids/feed-updater.*.pid
> @@ -55,7 +72,7 @@ do_restart() {
>    environments_loop start
>
>    clear_cache
> -  ruby -S bundle exec thin -C config/thin.yml restart --onebyone
> +  app_server_restart
>  }
>
>  stop_via_pid_file() {
> @@ -85,7 +102,7 @@ environments_loop() {
>  }
>
>  do_running() {
> -  pids=$(sed "s/.*/& /" tmp/pids/thin.*.pid 2>/dev/null | tr -d '\n')
> +  pids=$(sed "s/.*/& /" tmp/pids/unicorn.pid 2>/dev/null | tr -d '\n')
>    # passes if any of $pids exist, fails otherwise
>    kill -0 $pids > /dev/null 2>&1
>  }
> --
> 2.5.1
>
> _______________________________________________
> Noosfero-dev mailing list
> Noosfero-dev at listas.softwarelivre.org
> http://listas.softwarelivre.org/cgi-bin/mailman/listinfo/noosfero-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listas.softwarelivre.org/pipermail/noosfero-dev/attachments/20150910/0f4eda69/attachment.html>


More information about the Noosfero-dev mailing list