Ruby on rails 在不同域和不同环境的localhost上运行相同的Rails应用程序
我想分别在URL:davinci.local.dev:8081 davinci.testing.dev:8082和with environments development and testing上运行相同的Rails 3应用程序 我正在使用Nginx和passenger。我的第一次尝试是: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
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;
}