我想在网址上运行相同的Rails 3应用: 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
}
然而,当我浏览所述网址时,我会进行相同的部署。如果我首先请求测试,那么无论是浏览 davinci.local.dev 还是 davinci.testing.dev ,它都是始终提供的应用程序。如果我首先请求开发一个,那么就是那个始终服务的那个。
两个部署都使用相同的根应用程序。有没有办法使这个工作?
目标是在不同域中的不同ENV上提供相同的应用程序。
答案 0 :(得分:2)
我有类似的问题。我想要一个Rails应用程序(名为apparat)有两个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,我得到了我的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认为这些是不同的目录。
答案 1 :(得分:0)
我采取了不同的方法。开发服务器由nginx使用乘客提供服务,而测试服务器在使用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
这就是魔术。