运行Rails服务器的多个实例

Dav*_* W. 35 ruby-on-rails

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

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

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

但我收到路由错误,说它无法找到"members"路由.但是members来自我的第一个Rails应用程序!我想通过$ rails servertaskmaster目录中触发,它将启动该应用程序的服务器.

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

UPDATE

我刚发现如果我:

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

它仍然试图去寻找members路线,因为我通过git回滚了.

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

我认为Rails应用程序本质上是目录中的自包含应用程序 - 你只需要一个有效的Ruby安装来实现它们.Rails服务器是否位于每个应用程序目录中,还是可以容纳所有应用程序的一些总体Rails服务器?

cam*_*cam 48

我怀疑旧服务器仍在运行,新服务器无法启动.尝试先杀死它,然后启动它新的应用程序.

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

  • 我有一个在端口3000上运行的应用程序,我需要在3001上再启动一个服务器.我运行了这个命令rails server -p 3001,但是遇到了问题."服务器已在运行.请检查/home/chronus/projects/groups/tmp/pids/server.pid." (15认同)

Jas*_*der 29

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

rails s -p 3007
Run Code Online (Sandbox Code Playgroud)

但有时可能无效.

我有一个小贴士.你可以尝试使用这个以及webrick提供的其他选项.只需尝试使用以下任意数字作为PID -P:

rails s -p 3007 -P 42342
Run Code Online (Sandbox Code Playgroud)

  • -P选项似乎指定了pid文件,而不是pid本身.而是使用rails s -p 3007 -P`pwd`/tmp/pids/alternate_server.pid.Rails将使用新分配的pid填充此文件. (7认同)

Ale*_*ban 11

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

  • 服务器位于每个应用程序内.您可以尝试查找杂散服务器实例,例如使用`sudo netstat -l -p | grep 3000`(这将显示正在侦听端口3000的任何内容的进程ID). (2认同)

Bal*_*nan 9

rails s -p 4000 --pid tmp/pids/server2.pid
Run Code Online (Sandbox Code Playgroud)

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


Alb*_*alà 6

在Rails 5和Puma服务器中,这是实现此目的的方法:

使用两个终端,rails server在每个终端中运行,指定不同的Pid文件和​​不同的端口: 在此处输入图片说明

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


Dav*_* W. 1

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