【问题标题】:Running multiple instances of Rails Server运行多个 Rails Server 实例
【发布时间】:2011-02-08 01:23:49
【问题描述】:

我是 Rails 新手,如果这很明显,请原谅我。

我正在进行大量试验、创建应用程序、测试功能等。它使我的第一个脚手架应用程序运行良好,但我想创建第二个应用程序来测试不同的功能。

我在我的计算机上备份了一个文件夹级别,运行了$ rails new taskmaster(一个测试待办事项列表应用程序)。我为Task 模型运行了脚手架,通过$ rails server 启动了服务器,并尝试加载http://localhost:3000

但是我遇到了一个路由错误,说它找不到"members" 路由。但是members 来自我的第一个 Rails 应用程序!我想通过在taskmaster 目录中触发$ rails server,它会启动该应用程序的服务器。

我如何告诉 Rails 服务器提供哪个应用程序?

更新

我刚刚发现,如果我:

  1. 回滚到全新安装的第一个 Rails 应用程序,在我创建成员脚手架之前
  2. 通过应用程序根目录中的$ rails server 启动rails 服务器
  3. 检查http://localhost:3000

它仍然尝试去members 路由,因为我通过 git 回滚而不再存在的路由。

我猜这意味着在我的/usr/local/ 区域中,与我的 Ruby 和 Rails 初始安装有关的某些东西正在维护此信息(我的应用程序设置在我的主目录中的 Documents 文件夹中)。

我认为 Rails 应用程序本质上是目录中的自包含应用程序 - 您只需要安装有效的 Ruby 即可让它们运行。 Rails 服务器是否位于每个应用程序目录中,或者是某个可容纳所有应用程序的总体 Rails 服务器?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    我怀疑旧服务器仍在运行,而新服务器无法启动。尝试先将其杀死,然后再启动您的新应用。

    或者,您可以使用-p 开关(例如rails server -p 3001)在不同的端口上启动新服务器

    【讨论】:

    • 这很漂亮。现在我可以运行两个在本地相互通信的应用程序
    • 我有一个应用程序在端口 3000 上运行,我需要在 3001 上再启动一个服务器。我运行了这个命令 rails server -p 3001,但遇到了问题。 “服务器已经在运行。检查 /home/chronus/projects/groups/tmp/pids/server.pid。”
    【解决方案2】:

    您可以通过分配不同的端口号在 localhost 上运行多个 webrick 服务器实例:

    rails s -p 3007
    

    但有时它可能不起作用。

    我有一个提示给你。你可以尝试将它与 webrick 提供的其他选项一起使用。只需尝试使用-P 提供任何数字作为 PID:

    rails s -p 3007 -P 42342
    

    【讨论】:

    • -P 选项似乎指定了 pid 文件,而不是 pid 本身。而是使用 rails s -p 3007 -P pwd/tmp/pids/alternate_server.pid。 Rails 将使用新分配的 pid 填充此文件。
    • 由于某种原因,指定 PID 是唯一适合我的解决方案,但为什么使用不同的端口还不够?
    【解决方案3】:

    您无法真正告诉服务器要为哪个应用程序提供服务,但您可以为每个应用程序运行一个服务器,然后选择加载哪个应用程序。如果要运行多个服务器,则必须在不同的端口上启动它们。默认端口是 3000。要在端口 3001 上启动服务器,请在 Rails 3 上运行 rails s -p 3001 或在 Rails 2 上运行 script/server -p 3001

    【讨论】:

    • 我在不同的端口 (3001) 上启动它,它仍然尝试使用“成员”路由,即使我回滚到创建该路由/模型/脚手架之前(查看我的更新)。
    • 服务器位于每个应用程序内部。您可以尝试寻找杂散的服务器实例,例如使用sudo netstat -l -p | grep 3000(这将显示正在侦听端口 3000 的任何进程的进程 ID)。
    • @Alex Korban 为我们这些新手提出了一个非常关键的观点:这是因为服务器位于应用程序内部。这对我来说并不直观,但一旦清楚,所有服务器的行为就会变得更加理性。
    • 我总是用默认端口3000启动rails服务器。你是怎么把它改成3001的?出于好奇.. :)
    • 我没有看过 Rails 4,但我认为端口仍然设置为 -p,与 Rails 3 中相同:rails s -p 3001
    【解决方案4】:
    rails s -p 4000 --pid tmp/pids/server2.pid
    

    上述命令将安全地在端口 4000 中启动第二个服务器

    【讨论】:

      【解决方案5】:

      在 Rails 5 和 Puma 服务器中,我可以这样实现:

      使用两个终端,在每个终端中运行 rails server,指定不同的 Pid 文件和不同的端口:

      这样,我可以在开发中为同一个应用模拟两个域

      【讨论】:

      • 第二个-p不需要是-P(大写)吗? -p 指定端口。 -P 指定PID。
      • 不,和我一样,我指定了不同的端口和不同的 PID,它们之间没有冲突
      • -b 0.0.0.0,在这种情况下没有必要,我用它从另一台电脑连接
      • 道歉。我误读了您的命令文本。当我放大它时,我可以看到 PID 的 -P 是大写的。在缩略图版本中很难看到,因为系统字体的大小写差异非常细微。一开始你是对的。
      【解决方案6】:

      要启动 Rails 服务器,请运行命令 rails srails server 以下选项有效

      -p Port
      -b Binding (ip address)
      -c Config file (for custom rack configuration)
      -d Daemonize server
      -u Enable debugger
      -e Change the environment (defaults to development)
      -P Specify a PID file
      

      所以要将实例运行到本地机器的不同端口,请使用以下命令

      rails s -b 127.0.0.1 -p 8081 
      

      请注意,您可以删除“127.0.0.1”,因为“localhost”是默认主机。

      有关更多信息,请查看此参考http://guides.rubyonrails.org/command_line.html#rails-server

      【讨论】:

        【解决方案7】:

        在当前版本的 Rails 5.2.0 和 Ruby 2.4.1p111 中,可以使用多个 PID 为同一个应用程序启动两个服务器实例。

        $ rails s 
        => Booting Puma
        => Rails 5.2.0 application starting in development 
        => Run `rails server -h` for more startup options
        Puma starting in single mode...
        * Version 3.11.4 (ruby 2.4.1-p111), codename: Love Song
        * Min threads: 5, max threads: 5
        * Environment: development
        * Listening on tcp://0.0.0.0:3000
        Use Ctrl-C to stop
        

        现在在不同的端口上再启动一台服务器失败并出现 pid 问题。

        $ rails s -p 3001
        => Booting Puma
        => Rails 5.2.0 application starting in development 
        => Run `rails server -h` for more startup options
        A server is already running. Check /Users/biju/app1/tmp/pids/server.pid.
        Exiting
        

        以下启动服务器的方法适用于使用多个应用程序实例。

        $ rails s -p 3001 -P 321412
        => Booting Puma
        => Rails 5.2.0 application starting in development 
        => Run `rails server -h` for more startup options
        Puma starting in single mode...
        * Version 3.11.4 (ruby 2.4.1-p111), codename: Love Song
        * Min threads: 5, max threads: 5
        * Environment: development
        * Listening on tcp://localhost:3001
        Use Ctrl-C to stop
        

        【讨论】:

        • 你只是随便凑个PID吗?
        【解决方案8】:

        感谢您的所有帮助 - 原来这是一个相当奇怪的事件。不知何故,我的整个项目文件夹都被复制到了垃圾箱中。当我启动服务器时,我在垃圾箱副本中启动服务器实例,而我回滚和编辑的副本留在同一个地方。不知道这是怎么发生的(也许它与 git 有关,这是我刚刚学习的另一个工具)。无论如何,感谢所有的帮助,对不起,事情太简单了!

        【讨论】:

          猜你喜欢
          • 2020-10-03
          • 2018-01-29
          • 2011-04-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-29
          相关资源
          最近更新 更多