Rails 在一台 Linux 服务器上配置两个 unicorn worker,为什么在配置第二个服务的时候提示 production is already worker

lzm420241 · 2016年03月11日 · 最后由 leiz_me 回复于 2016年03月12日 · 2495 次阅读

我在 linux 上新配置一个 unicorn 服务,然后所有配置文件配置好,启动 unicorn 服务,提示:Unicorn app - production is already running,如何在一台服务器启动多个 unicorn 服务啊? 配置文件都是没问题的,因为可以正常运行,但是两个项目共用同一个端口号 80,

socket 名字不要取重了

#1 楼 @small_fish__ 没有重名,不过公用同一个 80 端口的

ps aux | grep unicorn

#3 楼 @huacnlee 打开看了,只有一个 unicorn 在运行,另外一个无法运行

贴配置啊,两个 Unicorn 是怎么配置的,你是怎么启动的

,我两个 unicorn,里面的 user 和 APProot 不同,其他的都是一样的

两个 unicorn 配置都是按着这个:https://beyondalbert.com/deploy-rails-app-with-unicorn-and-nginx-on-aliyun/unicorn已经启动来配置,除了路径改了下,其他都没改,第一个顺利能启动,第二个说

listen 的端口号修改了吗? #7 楼 @lzm420241

#8 楼 @small_fish__ 没有,都是 80 端口的

#9 楼 @lzm420241 80 端口一般都是给 web 代理服务器的,比如 nginx。 unicorn 不会跑在这个端口,你查看下你 unicorn.rb 文件,修改下 listen [端口号] 这个试试。

楼主好多概念混起来了,具体是什么需求?你这样启动不了是因为就像 /etc/init.d/mysql start 调用两次出问的题一样的,跟你具体的 app 配置还没扯上关系了。说下我大致思路:

  1. init.d 脚本,两个项目 (app) 肯定要写两个, /etc/init.d/unicorn_app1, /etc/init.d/unicorn_app2; init 脚本的作用只是方便添加开机启动或日常启停使用的,跟应用的访问没半毛钱关系。
  2. 两个项目 (app), 期望部署在同一个 nginx 80 的端口上你得参考 niginx 部署多个 app 的文档 (你目前参考的是单个 app 的),两个 app 你得考虑是打算通过不同域名 (nginx 配置即可) 区分还是打算通过相同域名不同路径 ( app 加不同的 scope 来实现) 来区分,不这么区分 nginx 肯定不知道怎么转发的。

最后的建议先停下来看看资料,理下思路再配置,去看看 nginx , unicorn 在应用中的作用可能很多概念就明白了

两个项目共用一个 80 端口,就像你和隔壁老王共用一张床一样。

80 给 nginx, 然后起两个 unicorn, 一个 18080,一个 18081,然后 nginx 配置里反代两个 unicorn, done.

需要 登录 后方可回复, 如果你还没有账号请 注册新账号