Ruby on rails 在不同域和不同环境的localhost上运行相同的Rails应用程序

Ruby on rails 在不同域和不同环境的localhost上运行相同的Rails应用程序,ruby-on-rails,nginx,passenger,Ruby On Rails,Nginx,Passenger,我想分别在URL:davinci.local.dev:8081 davinci.testing.dev:8082和with environments development and testing上运行相同的Rails 3应用程序 我正在使用Nginx和passenger。我的第一次尝试是: server { listen 8081; server_name .davinci.local.dev; root /Users/Nerian/NetBeansProj

我想分别在URL:davinci.local.dev:8081 davinci.testing.dev:8082和with environments development and testing上运行相同的Rails 3应用程序

我正在使用Nginx和passenger。我的第一次尝试是:

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,都是始终提供服务的应用程序。如果我首先要求开发一个,那么它是一个始终服务

两个部署都使用相同的根应用程序。有没有办法让这一切顺利


目标是在不同领域的不同环境中为同一应用程序提供服务。

我采取了不同的方法。开发服务器由nginx使用passenger提供服务,而测试服务器在使用rake spec:acceptance时根据需要启动

因此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

这就是神奇之处。

我也有类似的问题。我希望Rails应用程序(名为apparat)有两个nginx实例:example.eu代表网站的英文版本,example.ee代表爱沙尼亚版本。它们共享完全相同的功能,因此只有一个代码库是有意义的(但我必须确保静态资产(如用户上传的图像)不会发生冲突)

然而,与上面类似,如果我访问example.ee,我会得到Rails应用程序的example.eu实例。可能是nginx/乘客的一些怪癖

不管怎样,例如,我通过创建一个指向/home/apparat的任意符号链接来解决问题

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,使其认为这些是不同的目录。

这是一种“旁白”,但您是否也在使用nginx进行日志记录。我可以很好地记录GET请求,但在记录POST请求的正文响应时遇到了问题。我想你可能有一些见解。这是一种“旁白”,但你也在使用nginx来做日志记录。我可以很好地记录GET请求,但在记录POST请求的正文响应时遇到了问题。我想你可能有一些见解。
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;
}