ruby on rails - run - Cambiar una aplicación Rails a producción
ruby rails guide (15)
Asegúrese de haber hecho lo siguiente en su archivo environment.rb.
ENV [''RAILS_ENV''] || = ''producción''
Si su aplicación se ejecuta en un entorno de alojamiento compartido o en un pasajero de phushion, es posible que necesite realizar cambios en .httaccess (dentro de la carpeta pública) y establecer el modo como 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, environment.rb por ejemplo, para hacer eso?
Cómo configurar y ejecutar una aplicación de Rails 4 en modo de Producción (paso a paso) usando Apache y Phusion Passenger:
Normalmente, usted podría ingresar su proyecto de 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 básica del servidor (CentOS 6, pero debería 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 por completo de que después de configurar Passenger, haya editado el archivo
/etc/httpd/conf/httpd.conf
para reflejar su estructura de directorios. Desea apuntar DocumentRoot a su proyecto Rails / carpeta pública Anywhere en el archivohttpd.conf
que tiene este tipo de directorio:/var/www/html/your_application/public
necesita ser actualizado o todo será muy frustrante. No puedo enfatizar esto lo suficiente.Reinicie el servidor (o Apache al menos -
service httpd restart
)Ingrese a la carpeta del proyecto Rails
/var/www/html/your_application
y comience la migración conrake db:migrate
. Asegúrese de que exista una tabla de base de datos, incluso si planea agregar tablas más adelante (esto también es parte del paso 1).RAILS_ENV=production rake secret
: esto creará una clave secreta que puede agregar aconfig/secrets.yml
. Puedes copiarlo / pegarlo en config / secrets.yml para que todo funcione, aunque te recomiendo que no lo hagas. Personalmente, hago este paso para asegurarme de que todo lo demás funciona, luego lo cambio y lo fuente más adelante.RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake assets:precompile
si está sirviendo activos estáticos. Esto enviará js, css, archivos de imagen a la carpeta/public
.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 mira 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 funcionó en el pasado.
Cambie la variable de entorno RAILS_ENV
a production
.
Como otros han publicado: rails server -e production
O, mi favorito personal: RAILS_ENV=production
rails s
RAILS_ENV=production
En Rails 3
Agregar 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
Esto ahora sería
rails server -e production
O, más compacto
rails s -e production
Funciona para proyectos de rieles 3+.
No es una buena forma de ejecutar el servidor de rieles en el entorno de producción mediante "rails server -e production", ya que Rails se ejecuta como una aplicación de subproceso único y solo puede responder a una solicitud HTTP a la vez.
El mejor artículo sobre el entorno de producción para raíles es Production Environments - Rails 3
Por defecto, el servidor se ejecuta en el entorno de desarrollo: $ rails s
Si se está ejecutando en el entorno de producción: $ rails s -e production
o $ RAILS_ENV=production rails s
Si la sugerencia de mipadi no funciona, agréguela 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''
Si está ejecutando Passenger , 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 anulando la constante RAILS_ENV en el entorno. rb probablemente sea tu último recurso, ya que probablemente no se mantendrá fijo (ver otra respuesta que di sobre eso)
También puede pasar el entorno a script / servidor:
$ script/server -e production
para el servidor predeterminado: rails s -e production
para el puerto del servidor costum: raíles s -p [puerto] -e producción, p. ej. rieles s -p 3002 -e producción
$> export RAILS_ENV=production
RAILS_ENV=production rails s
O
rails s -e production
Por defecto el entorno es desarrollo.
rails s -e production
Esto ejecutará el servidor con RAILS_ENV
= ''production''
.
Aparte de esto, debes establecer la ruta de los activos en production.rb
config.serve_static_assets = true
Sin esto, sus activos no se cargarán.