Подтвердить что ты не робот

Сервер ROR + A уже запущен. Проверьте... /tmp/pids/server.pid. Выход

В моем проекте Rails я пытаюсь запустить два разных сервера на разных портах. Но он не удается, указав эту ошибку на консоли.

C:\Rails>rails s
=> Booting Mongrel
=> Rails 3.1.1 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
A server is already running. Check C:/Rails/tmp/pids/server.pid.Exiting

Проверьте обновленный ответ.

4b9b3361

Ответ 1

После многопользовательской игры я просто удаляю этот файл и перезапускаю сервер. Затем снова создайте этот файл, затем я снова удалю этот файл. Теперь сервер работает нормально. И система генерирует другую копию в том же месте. Но он работает хорошо.

DELETE THAT FILE ....

Если вы хотите запустить два сервера, это может снова создать проблему. Так

Обе команды проверяют местоположение файла PID по умолчанию (tmp/pids/server.pid), поэтому вы видите эту ошибку. Попробуйте запустить несколько серверов:

Server 1: bundle exec rails s

Server 2: bundle exec rails s -p 3001 -P tmp/pids/server2.pid

Кредит: fooobar.com/questions/58830/...

Спасибо

UPDATE после комментария Коннора Лича о Forman Gem

Foreman может помочь управлять несколькими процессами, которые зависит от вашего приложения Rails при запуске в процессе разработки. Он также предоставляет команду экспорта чтобы перевести их в производство.

Ответ 2

Вы можете использовать netstat, чтобы узнать, какой процесс держит веб-сервер rails, тогда вы можете убить pid и запустить его снова, предполагая, что по какой-то странной причине сервер не отвечает или работает в фоновом режиме, и вы не можете найти другой способ перезапустить его.

netstat -plntu | grep 3000
tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN      7656/ruby

В последнем столбце указаны PID и имя процесса, тогда вам нужно только сделать:

kill -9 7656

и rails s, чтобы он снова работал...

Надеюсь, что это полезно

Ответ 3

Я снова возвращаюсь на эту веб-страницу, чтобы найти команду lsof -wni tcp:3000, поэтому я нашел этот метод более простым.

Если вы получите это сообщение:

A server is already running. Check /Users/username/project/tmp/pids/server.pid.
Exiting

И если вы работаете в системе unix (mac или linux), вы можете запускать следующие команды:

$ cat /Users/username/project/tmp/pids/server.pid

# output

71030

# Kill the process

$ kill -9 71030

Затем запустите свой сервер снова!

Ответ 4

Я удалил файл с помощью cd'ing в каталог tmp, а затем удалив файл

rm server.pid

Затем я перезапустил сервер, и я получил эту ошибку

Exiting/Users/josephmellin/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/socket.rb:206:in `bind': Address already in use - bind(2) for 0.0.0.0:3000 (Errno::EADDRINUSE)

Затем я мог бы использовать следующую команду, чтобы увидеть, какой процесс запущен.

sudo lsof -iTCP -sTCP:LISTEN -P | grep :3000

И после того, как я ввел свой пароль, я получил этот ответ

ruby      2786 josephmellin   12u  IPv4 0xfeadd8ae849eaec9      0t0  TCP *:3000 (LISTEN)

И затем убил процесс с помощью следующей команды

KILL -9 2786

И затем перезапустил сервер (у вас будет другое число, чем 2786 - я оставил его здесь для демонстрационных целей)

Ответ 5

Шаг 1: удалите .pid

C:/Rails/tmp/pids/server.pid.Exiting

# IN linux/unix shell
$ rm -rf <path to file>

Иногда это не решает проблему, тогда вам нужно убить процесс, выполняемый localhost, для таких случаев следуйте за STEP 2

ШАГ 2: Перечислите процесс для localhost и убейте его

# For Linux/Unix shell

$ lsof -wni tcp:3000

# output
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
ruby    5946 rails   11u  IPv4  79073      0t0  TCP *:3000 (LISTEN)
ruby    5946 rails   12u  IPv4 103786      0t0  TCP 127.0.0.1:3000->127.0.0.1:53612 (ESTABLISHED)

# Kill the running process
$ kill -9 5946

снова запустите сервер

rails server

Ответ 6

ps aux | grep rails
           or 
bundle exec rails s -p 3001 -P tmp/pids/server2.pid

Ответ 7

Каждый экземпляр сервера RoR создает файл PID. По умолчанию это

#{Rails.root}/tmp/pids/server.pid

и если этот файл уже существует, он откажется запускать новый сервер.

Чтобы запустить более одного сервера одного и того же проекта на одном компьютере, вы должны вручную указать имя файла PID для каждого экземпляра сервера (я рекомендую просто добавить дефис и номер порта) с помощью параметра -P:

rails s -p 1234 -P tmp/pids/server-1234.pid

Мне говорят, что в некоторых случаях вам может потребоваться полный (а не относительный) путь, но я не знаю, что это за дела.

Ответ 8

Вы можете увидеть PID для каждого процесса (первый столбец):

ps vax | grep rails
// OR:  ps auxw | grep rails

5236 pts/1    Sl+    1:46   2   0.2 /usr/bin/ruby1.9.1 script/rails s -p 3001
5298 pts/2    Sl+    0:12   2   0.7 /usr/bin/ruby1.9.1 script/rails s -p 3003
7356 pts/5    Sl+    0:09   2   0.9 /usr/bin/ruby1.9.1 script/rails s -p 3002
7846 pts/3    Sl+    0:19   2   1.7 /usr/bin/ruby1.9.1 script/rails s

Затем запустите сервер:

kill -9 <pid>

Чтобы убить все запущенные приложения с помощью "rails" в имени:

killall -9 rails

Ответ 9

Используйте команды по умолчанию для рельсов, например:

rake tmp:clear

Работает для меня, и очень просто.;)

Ответ 10

однолинейная команда, которая позаботится об этом.

kill -9 $(more C:/Rails/tmp/pids/server.pid)

Ответ 11

У меня просто была эта проблема, просто удаленный файл server.pid и сервер отлично работают!

Ответ 12

Удалите этот файл: C:/Rails/tmp/pids/server.pid

Ответ 13

Простейший способ, которым я нашел меньше команд. Перейдите к пути, в котором говорится, что сервер работает в вашей структуре папок. Найдите файл. В самом файле отображается номер, который является текущим идентификатором процесса. Допустим, если число "x", то просто введите эту команду в свой терминал

kill -9 x

Однако обратите внимание, что это работает в Ubuntu. Не уверен, если он работает и в других ОС.

Ответ 14

Попробуйте изменить число в файле pid на другое и сохранить его.