Ответы пользователя по тегу Unicorn
  • Nginx + 2 RoR3 приложения, один из которых на Sub Uri. Как совместить?

    @dibrovsd
    Аналогичная проблема.
    Решил так:

    1. config/environment.rb

    Внизу

    RedmineApp::Application.routes.default_scope = { :path => '/redmine', :shallow_path => '/redmine' }
    
    # Это в конфиге есть
    RedmineApp::Application.initialize!
    
    Redmine::Utils::relative_url_root = "/redmine"
    


    Таким образом, приложение ожидает запросы не от корня, а от префикса /redmine
    И ссылки формирует соответсвенно, не /users/login, а /redmine/users/login

    2. unicorn.rb не интересен особо, но, на всякий случай, приведу
    orker_processes 2
    working_directory "/home/www/redmine/"
    
    preload_app true
    
    timeout 30
    
    listen "/home/www/redmine/tmp/sockets/unicorn.sock", :backlog => 64
    
    pid "/home/www/redmine/tmp/pids/unicorn.pid"
    
    stderr_path "/home/www/redmine/log/unicorn.stderr.log"
    stdout_path "/home/www/redmine/log/unicorn.stdout.log"
    
    before_fork do |server, worker|
        defined?(ActiveRecord::Base) and
            ActiveRecord::Base.connection.disconnect!
    end
    
    after_fork do |server, worker|
        defined?(ActiveRecord::Base) and
            ActiveRecord::Base.establish_connection
    end
    ~                                                                         
    


    3. Конфиг nginx
    Запросы с префиксом /redmine проксируем на socket через upstream
    rewrite тут не нужно, потому что redmine и так ждет от нас префикса /redmine (чтоб ссылки работали)

    В вот статику отдаем через nginx напрямую.

    upstream unicorn_server { 
            server unix:/home/www/redmine/tmp/sockets/unicorn.sock;         
    } 
    
    server {
            server_name docflow.soglasie.ru;
    
            client_max_body_size 8m;
            keepalive_timeout 5;
    
            # apache
            location / {
                    proxy_pass http://127.0.0.1:8181;
            }
    
            # redmine
            location /redmine {
                    proxy_pass http://unicorn_server;
            }
    
            # redmine static
            location ~* /redmine/.+\.(ico|css|js|png) {
                    rewrite /redmine/(.*) /$1 break;
                    root /home/www/redmine/public/;
            } 
    
    }
    
    


    Не претендую на качественный конфиг. Это первый опыт использования nginx.
    Не пишу скрипты автозапуска и т.п. Предполагается, что они у вас есть.

    Главное, что работает.
    Возможно кому-то пригодится (даже мне самому, через какое-то время)
    Ответ написан