Cambiar una aplicación Rails a producción


190

¿Cómo puedo cambiar mi aplicación Rails para que se ejecute en modo de producción? ¿Hay un archivo de configuración, environment.rb, por ejemplo, para hacer eso?


2
Parece que la segunda respuesta tiene muchos más votos, ¿estaría dispuesto a darle una revisión rápida y aceptar la segunda respuesta a menos que tenga algún problema con ella? Solo ayudará a futuros visitantes. Thx :)
Evoluciona el

Respuestas:


73

Cómo configurar y ejecutar una aplicación Rails 4 en modo Producción (paso a paso) usando Apache y Phusion Passenger:

Normalmente, podrá ingresar a su proyecto Rails rails sy obtener una versión de desarrollo de su aplicación en http://something.com:3000 . El modo de producción es un poco más complicado de configurar.

He estado jugando con esto por un tiempo, así que pensé en escribir esto para los novatos (como yo). Hay algunos pequeños ajustes que se extienden a través de Internet y pensé que esto podría ser más fácil.

  1. Consulte esta guía para la configuración central del servidor (CentOS 6, pero debe aplicarse a casi todos los sabores de Linux): https://www.digitalocean.com/community/tutorials/how-to-setup-a-rails-4 -app-with-apache-and-passenger-on-centos-6

  2. Asegúrese de que después de configurar Passenger haya editado el /etc/httpd/conf/httpd.confarchivo para reflejar la estructura de su directorio. Desea apuntar DocumentRoot a su proyecto Rails / carpeta pública En cualquier parte del httpd.confarchivo que tenga este tipo de directorio: /var/www/html/your_application/publicdebe actualizarse o todo se volverá muy frustrante. No puedo enfatizar esto lo suficiente.

  3. Reinicie el servidor (o Apache como mínimo service httpd restart)

  4. Ingrese su carpeta de proyecto Rails /var/www/html/your_applicationy comience la migración con rake db:migrate. Asegúrese de que exista una tabla de base de datos, incluso si planea agregar tablas más tarde (esto también es parte del paso 1).

  5. RAILS_ENV=production rake secret- esto creará una clave secreta a la que puede agregar config/secrets.yml. Usted puede copiar / pegar esto en config / secrets.yml en aras de conseguir las cosas funcionando, aunque me gustaría recomendar que no lo hace. Personalmente, hago este paso para asegurarme de que todo lo demás funciona, luego lo cambio y lo busco más tarde.

  6. RAILS_ENV=production rake db:migrate

  7. RAILS_ENV=production rake assets:precompileSi está sirviendo activos estáticos. Esto empujará js, css, archivos de imagen a la /publiccarpeta.

  8. RAILS_ENV=production rails s

En este punto, su aplicación debería estar disponible en http://something.com/whateverlugar de :3000. Si no, passenger-memory-statsy ver si hay una entrada como908 469.7 MB 90.9 MB Passenger RackApp: /var/www/html/projectname

Probablemente me he perdido algo atroz, pero esto me ha funcionado en el pasado.


2
Siento que esta respuesta debería migrarse a la documentación de stackoverflow.
Whitecat

Agregaría que si no desea utilizar una entrega de contenido web como apache, podría agregar un RAILS_SERVE_STATIC_FILES = 1 al lado de RAILS_ENV = producción, eso significaría que los rieles servirían a cada archivo, por lo que no lo recomendaré para un estado de producción real ...
3d0

351

Esto ahora sería

rails server -e production

O más compacto

rails s -e production

Funciona para rieles 3+ proyectos.


33
o la versión cortarails s -e production
Pavel Nikolov

2
¿Qué pasa con los servicios en la nube como Heroku? ¿Cómo correr server -e productionsobre ellos?
Verde

Los servicios en la nube generalmente tienen opciones para especificar el entorno, pero en ellos productiones invariablemente el valor predeterminado.
James Billingham

2
echo "export RAILS_ENV=production" >> ~/.bash_profile
Meekohi

Respuesta muy preferida, esta debería llegar a la documentación de StackOverflow.
dmanexe

61

Si está ejecutando en Passenger , entonces el valor predeterminado es ejecutar en producción, en su configuración de apache:

<VirtualHost *:80>
  ServerName application_name.rails.local
  DocumentRoot "/Users/rails/application_name/public"
  RailsEnv production ## This is the default
</VirtualHost>

Si solo está ejecutando un servidor local con mongrel o webrick, puede hacer:

./script/server -e production

o en bash:

RAILS_ENV=production ./script/server

en realidad, anular la constante RAILS_ENV en enviornment.rb probablemente debería ser su último recurso, ya que probablemente no se mantendrá establecido (vea otra respuesta que di sobre eso)


54

Si la sugerencia de mipadi no funciona, agregue esto a config / environment.rb

# force Rails into production mode when                          
# you don't control web/app server and can't set it the proper way                  
ENV['RAILS_ENV'] ||= 'production'

¿Qué pasa con los servicios en la nube como Heroku? ¿Se ENV['RAILS_ENV'] ||= 'production'puede aplicar sobre ellos también?
Verde

Edité este archivo hace mucho tiempo y olvidé ... gracias por recordarme ... ahorré mucho tiempo
Agnes

19

Cambie la variable de entorno RAILS_ENVa production.


3
¿Dónde se encuentra la variable de entorno?
BKSpurgeon

puede estar ubicado en ~/.bashrco ~/.bash_profilesimplementeexport RAILS_ENV=production"
Shimaa Marzouk


18

También puede pasar el entorno al script / servidor:

$ script/server -e production

12
rails s -e production

Esto ejecutará el servidor con RAILS_ENV= 'production'.

Aparte de esto, debe establecer la ruta de los activos en production.rb

config.serve_static_assets = true

Sin esto, sus activos no se cargarán.


Lo siento ... voté en contra cuando estaba destinado a votar. Se realizó una ligera edición para corregir el error y votar.
tomd

7
RAILS_ENV=production rails s

O

rails s -e production

Por defecto el entorno es desarrollo.


5

Como otros han publicado: rails server -e production

O mi favorito personal: RAILS_ENV=production rails s


2

En rieles 3

Agregar Rails.env = ActiveSupport::StringInquirer.new('production')a la aplicación.rb y rails sfuncionará igual querails server -e production

module BlacklistAdmin
  class Application < Rails::Application

    config.encoding = "utf-8"
    Rails.env = ActiveSupport::StringInquirer.new('production')

    config.filter_parameters += [:password]
  end
end

2

No es una buena forma de ejecutar el servidor rails en el entorno de producción mediante "rails server -e production", ya que rails se ejecuta como una aplicación de un solo subproceso y solo puede responder a una solicitud HTTP a la vez.

El mejor artículo sobre entorno de producción para rieles es Entornos de producción - Rieles 3


3
Link rot ... disponible en la máquina wayback: link
rosuav

1

para el servidor predeterminado: rails s -e production

para el puerto del servidor costum: rails s -p [port] -e producción, por ejemplo. rieles s -p 3002 -e producción


1

Por defecto, el servidor se ejecuta en el entorno de desarrollo: $ rails s

Si está ejecutando en un entorno de producción: $ rails s -e productiono$ RAILS_ENV=production rails s


0

Asegúrese de haberlo hecho a continuación en su archivo environment.rb.

ENV ['RAILS_ENV'] || = 'producción'

Si su aplicación se ejecuta en un entorno de alojamiento compartido o pasajero, es posible que deba realizar cambios en .httaccess (dentro de la carpeta pública) y establecer el modo como producción.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.