Activos no cargados para una aplicación Sinatra montada con delgado y nginx
-
28-10-2019 - |
Pregunta
Tengo una aplicación simple de rieles con servidor de resque montada en routes.rb
como
require 'resque/server'
require 'resque_scheduler'
MyApp::Application.routes.draw do
authenticate :user do
mount Resque::Server.new, :at => "/tasks"
end
...
...
Montó la aplicación en rutas para usar la autenticación basada en dispositivos. Sin embargo, en la producción, los activos no se cargan para el servidor de resque, mientras que los activos para la aplicación principal de Rails se cargan correctamente.
Solución
Después de mirar alrededor, esto funcionó para mí con Nginx y delgado:
require 'resque/server'
class SecuredResqueServer < Resque::Server
set :static, true
set :root, Resque::Server.root
end
El archivo de rutas se ve de la siguiente manera:
require 'resque/server'
require 'resque_scheduler'
require './app/secured_resque_server'
MyApp::Application.routes.draw do
...
...
authenticate :user do
mount SecuredResqueServer.new, :at => "/tasks"
end
...
...
y cambiando
config.action_dispatch.x_sendfile_header = "X-Sendfile"
en producción.rb a
config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'
En tercer lugar, en algunos casos, Nginx está configurado para rieles de la siguiente manera:
server{
...
...
location ~*\.(jpeg|jpg|gif|png|ico|css|bmp|js)$ {
root /PATH_TO_APP/public;
}
...
...
}
Dónde Path_to_app es la ruta del directorio raíz de aplicación. Dicha declaración de ubicación evita que los activos se carguen desde cualquier otra ubicación para una aplicación o motor de rastrillo montado. Por lo tanto, esto debe eliminarse/comentarse.
Por último, no olvides hacer un Ctrl+F5
Para forzar la recarga de la página :)