Запуск одного и того же приложения Rails на локальном хосте в разных доменах и в другой среде - PullRequest
0 голосов
/ 24 декабря 2010

Я хочу запустить то же приложение Rails 3 по URL: davinci.local.dev: 8081 davinci.testing.dev: 8082 и соответственно со средами разработки и тестирования.

Я пользуюсь Nginx и пассажиром.Моя первая попытка была:

server {
      listen 8081;
      server_name .davinci.local.dev;
      root /Users/Nerian/NetBeansProjects/DaVinci/DaVinci/public;
      passenger_enabled on;
      rails_env development;   
      #rails_env development
   }

server {
      listen 8082;
      server_name .davinci.testing.dev;
      root /Users/Nerian/NetBeansProjects/DaVinci/DaVinci/public;
      passenger_enabled on;
      rails_env test;   
      #rails_env development
   }

И все же, когда я просматриваю указанные URL-адреса, я попадаю в то же развертывание.Если я сначала запрашиваю тестируемое приложение, то это приложение, которое обслуживается всегда, независимо от того, просматриваю ли я davinci.local.dev или davinci.testing.dev .Если я сначала запрашиваю один из них для разработки, то он всегда обслуживается.

В обоих развертываниях используется одно и то же корневое приложение.Есть ли способ сделать это работает?

Цель состоит в том, чтобы обслуживать одно и то же приложение на разных ENV в разных доменах.

Ответы [ 2 ]

2 голосов
/ 09 февраля 2011

У меня была похожая проблема. Я хотел, чтобы в приложении Rails (названном аппаратном) было два экземпляра nginx: example.eu для английской версии сайта и example.ee для эстонской версии. Они имеют одинаковую функциональность, поэтому имеет смысл иметь только одну кодовую базу (но я должен убедиться, что статические ресурсы, такие как загруженные пользователем изображения, не будут конфликтовать).

server {
   listen 80;
   server_name example.eu;
   root /home/apparat/public;
   passenger_enabled on;
   rails_env apparat_eng;
}

server {
   listen 80;
   server_name example.ee;
   root /home/apparat/public;
   passenger_enabled on;
   rails_env apparat_ee;
}

Однако, как и выше, если я получил доступ к example.ee, я получил экземпляр example.eu моего приложения на Rails. Возможно, какая-то особенность в nginx / passenger?

В любом случае я обошелся, сделав произвольную символическую ссылку на / home / device, например

ln -s /home/apparat /home/apparat_eng
ln -s /home/apparat /home/apparat_ee

и изменил конфигурацию nginx соответственно

server {
   listen 80;
   server_name example.eu;
   root /home/apparat_eng/public;
   passenger_enabled on;
   rails_env apparat_eng;
}

server {
   listen 80;
   server_name example.ee;
   root /home/apparat_ee/public;
   passenger_enabled on;
   rails_env apparat_ee;
}

Так что я могу обмануть nginx, думая, что это разные каталоги.

0 голосов
/ 25 декабря 2010

Я выбрал другой подход.Сервер разработки обслуживается nginx с использованием пассажира, а сервер тестирования запускается по требованию при использовании rake spec: accept.

Итак, nginx.conf:

server {
  listen 8081;
  server_name .davinci.local.dev;
  root /Users/Nerian/NetBeansProjects/DaVinci/DaVinci/public;
  passenger_enabled on;
  rails_env development;   
  #rails_env development
}

Только это.

И в spec / support / custom_env.rb

Capybara.run_server = true
Capybara.app_host = 'http://davinci.testing.dev:8082'
Capybara.server_port = 8082

И этомагия.

...