¿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?
¿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?
Respuestas:
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 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.
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
Asegúrese de que después de configurar Passenger haya editado el /etc/httpd/conf/httpd.conf
archivo para reflejar la estructura de su directorio. Desea apuntar DocumentRoot a su proyecto Rails / carpeta pública En cualquier parte del httpd.conf
archivo que tenga este tipo de directorio: /var/www/html/your_application/public
debe actualizarse o todo se volverá muy frustrante. No puedo enfatizar esto lo suficiente.
Reinicie el servidor (o Apache como mínimo service httpd restart
)
Ingrese su carpeta de proyecto Rails /var/www/html/your_application
y 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).
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.
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake assets:precompile
Si está sirviendo activos estáticos. Esto empujará js, css, archivos de imagen a la /public
carpeta.
RAILS_ENV=production rails s
En este punto, su aplicación debería estar disponible en http://something.com/whatever
lugar de :3000
. Si no, passenger-memory-stats
y 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.
Esto ahora sería
rails server -e production
O más compacto
rails s -e production
Funciona para rieles 3+ proyectos.
rails s -e production
server -e production
sobre ellos?
production
es invariablemente el valor predeterminado.
echo "export RAILS_ENV=production" >> ~/.bash_profile
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)
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'
ENV['RAILS_ENV'] ||= 'production'
puede aplicar sobre ellos también?
Cambie la variable de entorno RAILS_ENV
a production
.
~/.bashrc
o ~/.bash_profile
simplementeexport RAILS_ENV=production"
$> export RAILS_ENV=production
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.
En rieles 3
Agregar Rails.env = ActiveSupport::StringInquirer.new('production')
a la aplicación.rb y rails s
funcionará 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
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
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
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 production
o$ RAILS_ENV=production rails s
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.