Cambiar una aplicación Rails a producción


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

Author: the Tin Man, 2009-12-23

15 answers

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

Normalmente podría ingresar a su proyecto Rails, rails s, y 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 principal del servidor (CentOS 6, pero debería aplicarse a casi todos los tipos 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, ha editado el archivo /etc/httpd/conf/httpd.conf para reflejar la estructura de su directorio. Quieres señalar DocumentRoot a su carpeta Rails project /public En cualquier lugar del archivo httpd.conf que tenga este tipo de dir: /var/www/html/your_application/public necesita ser actualizado 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. Introduzca su carpeta de proyecto Rails /var/www/html/your_application e inicie la migración con rake db:migrate. Asegúrese de que existe una tabla de base de datos, incluso si planea agregar tablas más adelante (esto también es parte del paso 1).

  5. RAILS_ENV=production rake secret - esto creará un secret_key que puede agregar a config/secrets.yml. Puede copiar/pegar esto en config/secrets.yml por el bien de hacer que las cosas funcionen, aunque te recomiendo que no hagas esto. Personalmente, hago este paso para asegurarme de que todo lo demás esté funcionando, luego lo cambio de nuevo y lo obtengo más tarde.

  6. RAILS_ENV=production rake db:migrate

  7. RAILS_ENV=production rake assets:precompile si está sirviendo activos estáticos. Esto empujará js, css, archivos de imagen en el /public carpeta.

  8. RAILS_ENV=production rails s

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

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

 64
Author: etusm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-02 14:21:59

Esto sería ahora

rails server -e production

O, más compacto

rails s -e production

Funciona para proyectos rails 3+.

 348
Author: BandsOnABudget,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-24 10:53:24

Si se está ejecutando en Passenger , entonces el valor predeterminado es ejecutarse en producción, en su conf 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 mestrel o webrick, puede hacer:

./script/server -e production

O en bash:

RAILS_ENV=production ./script/server

En realidad sobreescribe la constante RAILS_ENV en el enviornment.rb probablemente debería ser su último recurso, ya que probablemente no se quedará establecido (ver otra respuesta que di sobre eso)

 61
Author: Dan McNevin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:33

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'
 54
Author: Pete,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:41

Cambie la variable de entorno RAILS_ENV a production.

 19
Author: mipadi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-22 21:22:57

También puede pasar el entorno a script / server:

$ script/server -e production
 18
Author: foz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-22 22:35:41
$> export RAILS_ENV=production
 18
Author: Evolve,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-10 11:16:37
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.

 12
Author: prasann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-29 23:36:03
RAILS_ENV=production rails s

O

rails s -e production

Por defecto el entorno es developement.

 6
Author: puneet18,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-11 07:08:08

Como otros han publicado: rails server -e production

O, mi favorito personal: RAILS_ENV=production rails s

 5
Author: alex1sz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-17 16:57:37

En Carriles 3

Añadiendo Rails.env = ActiveSupport::StringInquirer.new('production') en la aplicación.rb y rails s funcionarán igual que rails 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
Author: RSK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-05 13:39:18

No es una buena manera de ejecutar rails server en el entorno de producción mediante "rails server-e production", porque entonces 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 rails es Entornos de producción-Rails 3

 2
Author: Eugene Liskovets,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-19 23:06:18

Para el servidor predeterminado: rails s-e production

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

 1
Author: user3786185,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-13 04:50:18

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

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

 1
Author: Pankaj Dhote,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-30 11:18:28

Por favor, asegúrese de haber hecho lo siguiente en su entorno.archivo rb.

ENV ['RAILS_ENV'] / / = 'production'

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

 0
Author: Rakesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-29 08:16:44