Хелперы Rails *_url с пользовательским (не 80) портом в производстве. (Нгинкс, Юникорн)

Я нуб в производственной среде рельсов. Могу ли я настроить nginx и unicorn для ответа на другой (не 80) порт? Мне не нужны никакие домены, мне нужен только ip и порт. Вот конфигурация nginx для моего приложения (порт 80):

server {
    listen 80;
    server_name  localhost;
    root /home/my_app_folder/web-app/public;
    client_max_body_size 32m;
    location / {
        try_files  $uri @unicorn;
    }
    location @unicorn {
        proxy_set_header  Client-Ip $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header  Host $host;
        proxy_pass  http://unix:/home/my_app_folder/web-app/tmp/sockets/unicorn.sock;
    }
}

Мое приложение отлично работает с 80 портом. Например, если я изменю 80 на 3000, как здесь:

server {
    listen 3000;
    server_name  localhost;
    root /home/my_app_folder/web-app/public;
    client_max_body_size 32m;
    location / {
        try_files  $uri @unicorn;
    }
    location @unicorn {
        proxy_set_header  Client-Ip $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header  Host $host;
        proxy_pass  http://unix:/home/my_app_folder/web-app/tmp/sockets/unicorn.sock;
    }
}

У меня возникла проблема. Все работает нормально, я могу перейти на http://my_ip:3000, но помощники URL-адресов Rails (например, root_url и т. д.) не имеют порта (http://my_ip >).

Что я могу сделать, чтобы увидеть помощники URL с портом? Есть ли способ сделать это в файлах конфигурации Nginx или, может быть, Unicorn? В конце концов, когда я запускаю Webrick локально, он имеет вид URL http://localhost:3000 и каждый помощник *_url вернуть URL-адрес с портом 3000. Мне нужно изменить несколько файлов конфигурации и перенести приложение на другой порт.

Спасибо.


person kasper375    schedule 09.05.2012    source источник
comment
Привет, @kasper375, ты решил эту проблему?   -  person caarlos0    schedule 02.05.2013


Ответы (1)


Попробуйте поместить что-то вроде этого в контроллер приложения:

default_url_options[:port] = 3000 if Rails.env.production?

или, в зависимости от того, какую версию Rails вы используете:

Rails.application.routes.default_url_options[:port]= 3000 if Rails.env.production?

Кредит - ответ Дилана по адресу:

default_url_options и рельсы 3

person Steve Rowley    schedule 09.05.2012