2011-02-08 15 views
29

Soy nuevo en Rails, así que por favor, perdóneme si esto es obvio.Ejecutando varias instancias de Rails Server

Estoy experimentando mucho, creando aplicaciones, probando funciones, etc. Conseguí que mi primera aplicación con scaffolded funcionara muy bien, pero quería crear una segunda aplicación para probar una función diferente.

Copié una copia de seguridad de un nivel de carpeta en mi computadora, ejecuté $ rails new taskmaster (una aplicación de lista de tareas de prueba). Ejecuté el andamio para el modelo Task, encendí el servidor a través del $ rails server e intenté cargar http://localhost:3000.

Pero recibí un error de enrutamiento, diciendo que no podía encontrar la ruta "members". ¡Pero members era de mi primera aplicación Rails! Pensé que disparando $ rails server en el directorio taskmaster, arrancaría el servidor para esa aplicación.

¿Cómo le digo al servidor de Rails qué aplicación va a servir?

ACTUALIZACIÓN

acabo de descubrir que si:

  1. rollo de nuevo a la nueva instalación de la aplicación primera rieles, antes de crear el miembro andamio
  2. fuego de la servidor de carriles a través de $ rails server en el directorio raíz de la aplicación
  3. Verificar http://localhost:3000

Todavía intenta ir por la ruta members, la que ya no existe porque volví a rodar a través de git.

Supongo que esto significa que algo en mi área /usr/local/, relacionado con mis instalaciones iniciales de Ruby and Rails, es la principal de esta información (mis aplicaciones están configuradas en mi carpeta Documentos en mi directorio de inicio).

Pensé que las aplicaciones de Rails eran esencialmente aplicaciones autónomas dentro del directorio; solo necesitabas una instalación de Ruby para ponerlas en funcionamiento. ¿El servidor de Rails se encuentra dentro de cada directorio de la aplicación, o es el servidor de Rails general que acomoda todas las aplicaciones?

Respuesta

1

Gracias por toda su ayuda, resulta que fue una ocurrencia bastante extraña. De alguna manera, toda mi carpeta de proyecto se copió en la Papelera. Cuando comencé el servidor, comencé la instancia del servidor en la copia de la Papelera, mientras que la copia que revertí y edité permanece en el mismo lugar.No estoy seguro de cómo sucedió eso (tal vez se relaciona con git, otra herramienta que estoy aprendiendo). En cualquier caso, gracias por toda la ayuda, ¡lo siento, fue algo tan simple!

+0

"git es otra herramienta que estoy aprendiendo" ¿no somos todos? – saadlulu

46

Sospecho que el servidor anterior aún se estaba ejecutando y el nuevo servidor no se pudo iniciar. Intenta matarlo primero y luego comienza tu nueva aplicación.

Como alternativa, puede iniciar el nuevo servidor en un puerto diferente utilizando el interruptor -p (por ejemplo rails server -p 3001)

+0

esto funciona en los carriles 3 una nd 3.1 – workdreamer

+0

Esto es hermoso. Ahora puedo ejecutar dos aplicaciones que se comunican entre sí localmente – JohnMerlino

+12

Tengo una aplicación ejecutándose en el puerto 3000, necesito iniciar un servidor más en 3001. Ejecuté este servidor de comandos de rieles -p 3001, pero tuve un problema. "Un servidor ya se está ejecutando. Compruebe /home/chronus/projects/groups/tmp/pids/server.pid". – 123

9

realmente no se puede indicar al servidor qué aplicación para servir, pero se puede ejecutar un servidor para cada aplicación, y elija cuál cargar. Si desea ejecutar más de un servidor, deberá iniciarlos en diferentes puertos. El puerto predeterminado es 3000. Para iniciar un servidor en el puerto 3001, ejecute rails s -p 3001 en Rails 3 o script/server -p 3001 en Rails 2.

+0

Lo inicié en un puerto diferente (3001), y todavía intenta ir por la ruta de "miembros", aunque volví a la situación antes de crear esa ruta/modelo/andamio (ver mi actualización). –

+2

El servidor se encuentra dentro de cada aplicación. Podría tratar de buscar instancias de servidores parásitos, p. con 'sudo netstat -l -p | grep 3000' (esto mostrará la identificación del proceso de lo que esté escuchando en el puerto 3000). –

+0

@Alex Korban es realmente un punto clave para nosotros los novatos: es porque el servidor se encuentra dentro de la aplicación. Eso no fue intuitivo para mí, pero una vez que estuvo claro, todo el comportamiento del servidor se volvió mucho más racional. –

18

Puede ejecutar varias instancias de servidor en el servidor local WEBrick mediante la asignación de un número de puerto diferente como:

rails s -p 3007 

Pero a veces no puede trabajar.

Tengo un consejo para usted. Puede intentar usar esto junto con otras opciones proporcionadas por webrick. Solo trata de proporcionar cualquier número como PID usando -P:

rails s -p 3007 -P 42342 
+4

la opción -P parece especificar el archivo pid, en lugar del propio pid. En su lugar use los rieles s -p 3007 -P 'pwd'/tmp/pids/alternate_server.pid. Rails completará este archivo con un nuevo pid asignado. –

2

Para iniciar el servidor de rieles, ejecute el comando rails s o rails server Las siguientes opciones son válidas

-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 

Así que para ejecutar una instancia a un puerto diferente en la máquina local, use el siguiente comando

rails s -b 127.0.0.1 -p 8081 

Tenga en cuenta que puede eliminar "127.0.0. 1 "como" localhost "es el host predeterminado.

Para obtener más información, consulte esta referencia http://guides.rubyonrails.org/command_line.html#rails-server

1

En los carriles 5 y servidor Puma, esta es la forma en que podía lograr esto:

Con dos terminales, ejecutar rails server en cada terminal especificando diferentes archivos PID y diferentes puertos: enter image description here

esta manera, se pueden simular dos dominios de la misma aplicación en el desarrollo

Cuestiones relacionadas