【发布时间】:2015-02-15 10:35:53
【问题描述】:
我想运行我的 Rails 站点的两个版本,一个用于生产,一个用于开发。生产版将监听 80 端口,开发版将监听 9033 端口。这是我的配置服务器块,它们位于同一文件中
server {
listen 80 default_server;
server_name mywebsite.com;
passenger_enabled on;
passenger_app_env production;
root /path/to/public/dir;
}
server {
listen 9033 default_server;
server_name mywebsite.com;
passenger_enabled on;
passenger_app_env development;
root path/to/public/dir;
passenger_friendly_error_pages on;
}
问题在于当我尝试通过浏览器连接网站时,无论我使用哪个端口,我总是得到与first服务器中指定的环境对应的网站版本堵塞。因此,在我上面给出的示例中,它始终为我的网站的生产版本提供服务。
为什么第一个服务器块会覆盖第二个,我怎样才能做到这一点,以便我可以访问我的网站的任一版本,而无需手动更改配置文件并重新加载 nginx?
更新:
即使在发送每个 HTTP 请求之前清除了浏览器缓存之后,这些建议都不起作用。我将我的服务器块更改为以下内容,希望我的服务器返回不同版本的网站
server {
listen *:80;
server_name mywebsite.com;
passenger_enabled on;
passenger_app_env production;
root /home/alex/code/m2m/public/;
}
server {
listen *:80;
server_name dev.mywebsite.com;
passenger_enabled on;
passenger_app_env development;
root /home/alex/code/m2m/public/;
passenger_friendly_error_pages on;
}
然后在我的 /etc/hosts 文件中添加以下行
my.ip.addr.ess dev.mywebsite.com
但是对这两个域的请求只会返回我网站的生产版本。注意我使用的是默认的 nginx.conf 文件。有没有办法可以调试我的浏览器(Chrome v40.0.2214.111(64 位))来查看我的请求是否/在哪里被更改?我认为问题出在客户端,因为评论者给我的建议似乎应该有效。
【问题讨论】:
-
您的配置似乎正常,请发布日志。如果您评论第一个服务器块在 9033 端口上作为开发版本可以正常工作?还有其他服务器块吗?
-
当我注释掉第一个服务器块时,只有端口 9033 的开发版本返回正确的网页,生产版本得到 404。这是我的日志的粘贴箱:pastebin.com/Bk7vFESX 没有其他服务器块。
-
请测试,首先,删除两个
default_server指令,其次,从第二个server位置删除server_name。 -
删除 default_server 指令会导致生产版本的端口 80 被提供,而不管哪个服务器块是第一个。在第二次删除服务器指令什么都不做。好的,这是最奇怪的事情。我一直在运行“sudo nginx -s reload”来更新 nginx,并将其更改为我的网站 conf 文件。我发现如果我运行命令并发现端口 80 和 9033 都指向 prod 版本,如果我等待 10 秒,再次运行命令并等待 10 秒左右,我将被定向到 dev 版本我的网站!除了 conf 文件之外似乎有什么影响它
-
您确定您的浏览器缓存和所有这些东西都正常吗?是不是明显像你说的那样,客户端没有问题?
标签: ruby-on-rails-3 nginx passenger