首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不同的域和不同的环境上在本地主机上运行相同的Rails应用程序

在不同的域和不同的环境上在本地主机上运行相同的Rails应用程序
EN

Stack Overflow用户
提问于 2010-12-24 13:40:57
回答 2查看 1.2K关注 0票数 0

我想在urls上运行相同的Rails 3应用程序: davinci.local.dev:8081,davinci.testing.dev:8082,以及环境开发和测试。

我用的是Nginx和乘客。我的第一次尝试是:

代码语言:javascript
复制
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
   }

然而,当我浏览到上述urls时,就会得到相同的部署。如果我首先请求测试程序,那么无论我浏览到davinci.local.dev还是davinci.testing.dev,都会一直使用该应用程序。如果我首先请求开发的话,那就是一直为您服务的那个。

这两个部署都使用相同的根应用程序。有办法让这件事成功吗?

目标是在不同领域的不同ENV上提供相同的应用程序。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-08 22:35:57

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

代码语言:javascript
复制
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,例如

代码语言:javascript
复制
ln -s /home/apparat /home/apparat_eng
ln -s /home/apparat /home/apparat_ee

并分别更改了nginx配置。

代码语言:javascript
复制
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认为这些是不同的目录。

票数 2
EN

Stack Overflow用户

发布于 2010-12-25 15:02:07

我采取了不同的方法。开发服务器由nginx使用客运服务,而测试服务器是在使用rake规范时按需启动的:验收。

所以nginx.conf是:

代码语言:javascript
复制
server {
  listen 8081;
  server_name .davinci.local.dev;
  root /Users/Nerian/NetBeansProjects/DaVinci/DaVinci/public;
  passenger_enabled on;
  rails_env development;   
  #rails_env development
}

就是这样。

在规范/支持/自定义_env.rb中

代码语言:javascript
复制
Capybara.run_server = true
Capybara.app_host = 'http://davinci.testing.dev:8082'
Capybara.server_port = 8082

这就是魔法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4526637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档