Как использовать разные rails_env с nginx, passenger и redmine - PullRequest
3 голосов
/ 23 февраля 2011

Мне нужно запустить Redmine в сочетании с nginx, phusion passenger и mysql.Поскольку проекту требуется несколько экземпляров redmine, которые должны быть реализованы с использованием различных rails_env, я попытался установить их на разных серверах vhosts с помощью nginx.

Пример одного vhost:

server {
    listen xxxx;
    server_name redmine.xxxxx;
    root /xxxxx/redmine/public;
    passenger_enabled on;
    rails_env production;
}

То же самое относится и к другому серверу vhost, но там имя_сервера сопоставляется с другим доменом, а для rails_env задано внутреннее значение.

Проблема в том, что nginx просто использует один из обоих rails_env для обоих экземпляров redmine, а не один длякаждый.Любой совет, как использовать разные rails_env с одним и тем же приложением, nginx и phusion passenger?

Спасибо

Ответы [ 2 ]

1 голос
/ 29 марта 2014

Я думаю, у вас та же проблема, что и у меня. Вы хотите использовать один и тот же физический каталог для размещения экземпляров приложения, но вы хотите взаимодействовать с приложением в разных средах (разработка / производство), используя разные записи DNS (redmine.development / redmine.production) ???

Проблема в том, что пассажир распознает входящий запрос как приложение rails, находящееся в каталоге выше root. Если вы используете одну и ту же буквальную ссылку для root в нескольких конфигах nginx, пассажир отправит запрос на единственный запущенный экземпляр, найденный в root. То есть, если вы сначала запустите свое приложение для разработки, а затем попытаетесь получить доступ к продукту через redmine.production, вы в конечном итоге будете взаимодействовать со средой разработки. Однако если вы сначала запустите свое производственное приложение, а затем попытаетесь получить доступ к redmine.development, вы в конечном итоге будете взаимодействовать с производством.

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

ех.)

Физический корень - ~/rails_apps/myserver (где myserver содержит приложение, общедоступный и т. Д.)

Создайте символическую ссылку с именем ~/rails_apps/dev.myserver на ~/rails_apps/myserver, а другую ссылку с именем ~/rails_apps/pro.myserver на ~/rails_apps/myserver.

Теперь внутри вашей конфигурации nginx используйте расположение символических ссылок в общедоступной папке как root.

напр., Если symlink /home/user/rails_apps/[dev|pro].redmine указывает на / home / user / rails_apps / redmine)

server {
    listen xxxx;
    server_name redmine.development;
    root /home/user/rails_apps/dev.redmine/public;
    passenger_enabled on;
    rails_env development;
}
server {
    listen xxxx;
    server_name redmine.production;
    root /home/user/rails_apps/pro.redmine/public;
    passenger_enabled on;
    rails_env production;
}
0 голосов
/ 25 сентября 2015

nginx passenger не следует символической ссылке на каталог ... / app / public много раз, поскольку ожидает, что это будет каталог, а не файл
Однако вы можете использовать директиву PASSENGER_APP_GROUP_NAME.
, например: -

server {
listen xxxx;
server_name redmine.xxxxx;
root /xxxxx/redmine/public;
passenger_enabled on;
rails_env production;
passenger_app_group_name devlopment;
 }

 server {
listen xxxx;
server_name redmine.xxxxx;
root /xxxxx/redmine/public;
passenger_enabled on;
rails_env production;
passenger_app_group_name production
}
...