2011-11-13 19 views
11

Estoy buscando un buen tutorial de implementación para una aplicación Rails 3.1.1 en un servidor. Y bueno, realmente quiero decir completo. La razón por la que estoy publicando esta pregunta es que, aunque hay muchísimos tutoriales en la web (google, blogs, libros, otras preguntas sobre el stackoverflow, etc.), todos parecen centrarse en un problema con el proceso de implementación. o hacer algunas suposiciones sobre el entorno de despliegue que no coinciden con lo que necesito.Tutorial de implementación de aplicaciones Rails 3.1

Me doy cuenta de que implementar una aplicación de Rails en un servidor requiere una variedad de programas y herramientas diferentes que deben configurarse y de alguna manera siempre me quedo estancado en cosas "pequeñas" que me frustran.

Entonces, comencemos desde el principio. Lo que tengo ahora es un servidor al que puedo acceder a través de SSH y un nombre de dominio, llamémoslo www.example.com. El servidor ejecuta una versión nueva de Ubuntu 10.04 x64 y solo tiene un usuario instalado, a saber, la raíz (a través de la raíz, accedo al servidor con SSH). ¡Nota! No hay instalados Apache, Ruby, PHP, MySQL, cPanel o cualquier otro panel, solo lo mínimo que viene con una instalación nueva.

También el servidor web alojará una sola aplicación y la base de datos se ejecutará en la misma máquina.

Desde mi conocimiento del proceso de implementación de una aplicación Rails sigue los siguientes escenarios:

  • Instalación de Ruby

ya lo he hecho esto usando RVM utilizando el multiusuario proceso de instalación (simplemente porque tengo solo el usuario root y lo hace automáticamente). Esto parece funcionar bien después, pero tengo algunas preguntas:

¿Tendría más sentido instalar Ruby directamente y no a través de RVM (estoy pensando que tal vez en términos de eficiencia? También RVM hace un poco de magia detrás los escenarios modificando algunos archivos bash_profile de formas que no entiendo y esto de alguna manera parece invasivo ...)?

¿Tendría más sentido instalar como un usuario separado a través de RVM (puede haber problemas de seguridad)?

  • gemas necesarias

Ahora que Ruby se instala lo que sería el mejor conjunto inicial de gemas para instalar junto a él?

Instalé solo el paquete, de modo que una vez que cargué mi aplicación en el servidor puedo ejecutar un comando de instalación del paquete que instalará a su vez las gemas de la aplicación requerida.

Pregunta: ¿Debo instalar los gemelos de la gema de antemano? ¿Hay alguna otra gema que deba ser instalada?

  • servidor Web

Esto es donde se pone difícil para mí. Estoy tratando de usar apache y mod-passenger para la implementación (parecen ser los más populares).Así que instalé el servidor web Apache y la gema del pasajero y todas las dependencias relacionadas (bibliotecas mencionadas por el pasajero).

Ahora, surgen los problemas. Lo primero es relacionado con el usuario. ¿Cómo se ejecuta Apache? Quiero decir debajo de cada usuario? Si lo instalé y (re) lo inicié usando el usuario raíz, ¿se ejecutará permanentemente bajo el usuario raíz? ¿Esto es malo? En caso afirmativo, ¿debería crear otro usuario? Si es así, ¿cómo? ¿En qué grupos debería poner al nuevo usuario? ¿Qué derechos debería tener? (A saber, a qué carpetas debería tener acceso). Cómo iniciar el Apache en este caso (en la raíz, en virtud de ese usuario, añadir una línea en alguna parte del archivo de configuración, etc.)

  • configuración del Sitio Web

dónde poner la configuración de página web ¿cosas? ¿Está bien colocarlo en apache.conf, o debería crear un nuevo archivo en sites-available? ¿O debería simplemente reutilizar el archivo predeterminado que ya está presente allí? Si se ha creado un nuevo usuario en el paso anterior, ¿qué derechos debería tener en relación con los archivos de configuración?

Además ... ¿dónde colocar eventualmente la aplicación de rieles? ¿En qué carpeta sería mejor? En algún lugar debajo de casa? Tal vez en/var/www? Quiero saber cómo afectaría esto a los derechos del proceso de apache para la aplicación. (Por lo general, tengo problemas cuando presento una aplicación, me queja de que no tiene derechos en una carpeta específica. Además, al usar las nuevas canalizaciones de activos, que no entiendo del todo, se crean archivos de activos que parecen no tenerlos). heredar los derechos de carpeta principal ...)

  • base de datos

Como base de datos que estoy usando MySQL y su instalación es bastante sencillo. La pregunta que tengo aquí está nuevamente relacionada con el usuario. ¿Debería usar un usuario especial para la base de datos? ¿Cómo gestiona realmente MySQL los usuarios (son internos, o son los usuarios de Linux o ...?). ¿Debería el usuario de la base de datos ser el mismo que el "usuario web" desde arriba? ¿O debería ser uno diferente?

  • Activos

Aquí estoy totalmente perdido. Realmente tengo problemas para que la tubería de activos funcione. Revisé el episodio de Railscasts y también el tutorial del sitio web Rails y, en teoría, entiendo el tema, pero tengo problemas en la práctica.

Así que las preguntas aquí serían: ¿qué comandos debo ejecutar para precompilar los activos? (Intentando ejecutar activos de rake: precompilación). ¿Está bien? ¿Qué debería cambiar en el archivo production.rb? ¿Cómo funcionan los activos generados en relación con el usuario web o los usuarios de la base de datos creados anteriormente? Personalmente tengo un problema en este paso: los archivos de registro dicen que algunos archivos css no son accesibles (por ejemplo, tengo la biblioteca jqplot instalada en la carpeta proveedor/activos y no se puede acceder a sus archivos; si agrego un archivo de manifiesto aquí) ?).

Sería genial si alguien pudiera indicarme un artículo agradable o un recurso que explique todo esto. El área principal en la que estoy teniendo problemas es cómo interactúan Apache, Passenger, Ruby, Rails y MySQL con un usuario de Linux. ¿Cómo configurar correctamente los permisos para la carpeta de la aplicación Rails? ¿Cómo afecta la canalización de activos a este material de permiso de usuario?

Gracias

Respuesta

8

Aquí es mi forma de desplegar Rieles:

  • Instalación de Ruby

yo no usaría RVM porque es muy difícil de conseguir que funcione correctamente en combinación con cosas como trabajos cron. Doable (con envoltorios, por ejemplo), pero un poco molesto. Si no necesita otras versiones de Ruby en esa máquina, simplemente instálela desde la fuente usted mismo.

  • Gems

Sólo vamos Bündler trabajar su magia. Recuerde instalar con los indicadores --without test development --deployment. Sin embargo, no lo haría por adelantado. Solo asegúrate de tener bundler.

  • servidor Web

El uso de pasajeros (ya sea con Apache o Nginx) es una opción fina y fácil. Cuando instala Apache desde apt, se ejecutará en un usuario especial.

Apache se configura correctamente automáticamente en Ubuntu. Comenzará al reiniciar.

  • configuración del Sitio Web

Toda la configuración estar en/etc/apache2. Coloque su configuración de host virtual en/etc/apache2/sites-available y use a2ensite para habilitarlo.

Pon tu aplicación en /var/www, ya que esa es la ubicación predeterminada en Ubuntu. Normalmente hago un usuario de implementación.

Asegúrese de que el usuario pueda acceder a su aplicación asignando su aplicación al grupo www-data.

  • base de datos

MySQL tiene su propio sistema de usuario. Inicie la sesión como usuario root y crear un nuevo usuario con SQL: GRANT ALL ON 'application_production'.* TO 'deploy' IDENTIFIED BY 'some password';

  • Activos

activos deben generarse como el usuario propietario de la aplicación. Debe agregar cualquier archivo css y javascript a production.rb.Por ejemplo:

config.assets.precompile += %w(backend.css) 
  • Conclusión

Ayuda a utilizar una herramienta de despliegue como Capistrano. Cuando ejecute capify, elimine el comentario de la línea correspondiente en el Capfile para obtener la compilación de activos. Aquí está el mío:

ENV['RAILS_ENV'] = 'production' 
load 'deploy' if respond_to?(:namespace) # cap2 differentiator 
load 'deploy/assets' 
load 'config/deploy' 
require 'capistrano/ext/multistage' 
require "bundler/capistrano" 
require 'capistrano_colors' 

Así es como normalmente instalo mis aplicaciones de rieles. Espero que esto te ayude Recientemente escribí una joya para integrar Chef -solo con Capistrano, llamada capistrano-chef-solo. Es muy alfa y puede ser un poco complicado si solo está comenzando con la implementación, pero podría ayudarlo.

+0

Estoy de acuerdo con casi todo lo que hay aquí. Para compilar e instalar un sistema Ruby sin RVM utilizamos [ruby-build] (https://github.com/sstephenson/ruby-build) (sin rbenv). Y podría ser bueno tener en cuenta que si usa Capistrano, todo lo que realmente necesita es la gema de bundler instalada, instalando el resto con args de línea de comando correctos, Cap lo hará por usted. –