2012-06-20 5 views
1

Я пытаюсь найти способ развертывания моего приложения RAILS (рельсы 3.2, apache, пассажир). Приложение имеет два разных средства коммуникации.Несколько портов для приложения SAME rails

  1. Пользователи подключаются к нашему сайту https, как обычно для приложения с рельсами. Это подписывается стандартным коммерческим центром сертификации.
  2. Автоматизированные машины подключаются к нашему сайту и используют аутентификацию сертификата клиента и извлечение данных. Все это управляется нашими СА и сертификатами.

В настоящий момент я не рассматриваю балансировку, приложение будет работать на одной машине. Я не могу объединить эти два метода, используя опциональную проверку сертификатов на 443, так как это повлияет на другие приложения, запущенные на одном экземпляре apache, поэтому я считаю, что для приложения требуется два отдельных порта.

Как я должен управлять этим? Можно ли настроить apache на то же приложение через отдельные vhosts (возможно, через прокси-сервер для автономного пользователя)? Должен ли я искать разбиение моего приложения на два отдельных приложения с помощью некоторой общей библиотеки или движка? Должен ли я просто развертывать дважды, указывая на одну и ту же БД (как это повлияет на кеширование)?

Есть ли лучший способ различать порты подключения, чем проверка для сертификата клиента, и если так предположить автоматическое соединение?

Я также заинтересован в обоих хаках, чтобы заставить его работать быстро, а также правильный рельс, чтобы создать что-то вроде этого.

Благодаря

+0

Не можете ли вы просто использовать разные домены, а затем отделить их, используя vhosts? –

+0

Различные домены в значительной степени идентичны тем, что используют один и тот же домен на разных портах с отдельными vhosts. Проблема заключается не в том, как настроить порты, как настроить пассажирские и рельсы, чтобы использовать разные порты для одного и того же базового приложения. – jumentous

+0

Hum, интересно, поскольку пассажир работает с приложением от vhost, я не уверен, что это возможно или нет. Можете ли вы перейти на другую настройку веб-сервера, такую ​​как пассажир -> единорог (или даже nginx -> единорог)? –

ответ

0

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

class ApplicationController < ActionController::Base 
    def api_request? 
    request.port == 443 
    end 
end 

Затем в других контроллерах :

class UserController < ApplicationController 
    def index 
    @users = User.all 
    if api_request? 
     render :json => @users.to_json 
    else 
     render :action => :index 
    end 
    end 
end 
+0

Отлично, я предположил, что будет доступ к порту где-нибудь в запросе. Не отмечая, как принято, хотя, поскольку я все еще ищу, чтобы кто-то отвечал на большие проблемы с установкой. – jumentous

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