2014-12-16 2 views
1

Я написал небольшое приложение Rack, использующее стойку-прокси, чтобы он выглядел так, как приложения, работающие на разных портах, на самом деле являются разными подкаталогами одного домена. Оно работает.Мое приложение для прокси-сервера работает с разными портами, но не с разными URL-адресами

Если я бегу notes на порт 3001 и photos на 3002, то я могу пойти в localhost:3000/notes или localhost:3000/photos и все работает должным образом.

Это полезно только для его локального использования. Но если я хочу запустить эту же настройку на Heroku, мне нужно иметь возможность прокси-сервера для разных URL-адресов, а не только для разных портов. Поэтому, когда я меняю свой код с env["HTTP_HOST"] на http://localhost:3001 на /notes, вместо этого установите env["HTTP_HOST"] на http://sbbme-note.herokuapp.com на /notes, Стойка взрывает меня.

Я думал, что это будет Just Work ™. К несчастью, я что-то упустил.

Errno::EADDRNOTAVAIL at /notes 
Can't assign requested address - connect(2) for "http://sbbme-note.herokuapp.com" port 0 

Полный след следа находится в этом контексте.

https://gist.github.com/veganstraightedge/6d840377bf20b4b5f5db

РЭПО является homesteading/homesteading-router-rack. Филиал master - это тот, который работает только в режиме локальной разработки (несколько портов на локальном хосте). В ветке heroku-router я пытаюсь использовать разные (под) домены вместо разных портов. heroku-router - это тот, который взрывается (см. Выше).

Если вы хотите, чтобы установить это и попробовать его на своей машине, этот должен работы:

gem install homesteading 
homesteading new mysite 
cd mysite 
homesteading server 
open http://localhost:3000 

Я очень близко к возможности заменить мои лет груду моно рельсах с мой созвездие приложений подходит в Homesteading. Этот маршрутизатор является последним основным блокировщиком. Любая помощь будет принята с благодарностью.

PS. Моя первоначальная версия основана на этом сообщении в блоге (livsey dot org/blog/2012/02/23/using-rack-proxy-to-serve-multiple-rails-apps-from-the-same-domain-and-port) и этот вопрос/ответ на переполнение стека (stackoverflow dot com/questions/11057905/how-do-i-use-rackproxy-in-rails-to-proxy-request-to-a-specific-path-to-an "Как сделать Я использую Rack :: Proxy в Rails для прокси-запросов к определенному пути к другому приложению - переполнение стека »).

ответ

0

Решение было комбинацией предложения Лукаса и исправления того, что я изначально делал.

Я добавил это (как предложил Лукас).

env['SERVER_PORT'] = 80 

И я удалил http:// от моего env["HTTP_HOST"]

Итак, это:

env["HTTP_HOST"] = "http://#{app}" 

стал это:

env["HTTP_HOST"] = app 

Спасибо за вашу помощь, Лукаса!

0

Глядя на установку и трассировки стека это выглядит как прокси-сервер atrying для подключения к приложению sbbme примечаниями на порт 0. Попробуйте добавить

ENV['SERVER_PORT'] = '80' 

Вы могли бы также рассмотреть вопрос об использовании Nginx сборки пакета на heroku - реализация прямого прокси таким образом. Я использовал this build pack в качестве основного прокси-сервера, и он отлично поработал. Существуют и другие nginx build packs, которые предназначены для подключения к вашему серверу приложений (например, единорога), которые также могут быть полезны для этого использования.

+0

Я все еще новый пользователь переполнения стека. В настоящее время у меня только 6 репутации. Мне нужно, чтобы увеличить ваш ответ. Когда я получу это много, я вернусь к этому и поддержу вас. –

Смежные вопросы