es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo desactivar el servicio de archivos estáticos con Hunchentoot?

Estuve buscando en la documentación y archivos fuente de Hunchentoot durante gran parte de la noche pasada, pero no pude encontrar ninguna pista sobre cómo desactivar el servidor de archivos estáticos.

Todo lo que quiero hacer es escribir algunos controladores que respondan a las solicitudes HTTP POST. Dado que no encontré ninguna pista sobre cómo desactivar el intercambio de archivos estáticos en la documentación, me siento incapaz de dar cualquier “intentos de codificación” aquí, junto con esta pregunta.

Mi intento actual (no probado) es darle al atributo :document-root el valor nil, pero no está documentado qué hará Hunchentoot con eso (ya sea lo que quiero o usar el directorio raíz predeterminado…).

(let ((acceptor (make-instance 'hunchentoot:easy-acceptor
                 :port port
                 :document-root nil
                 :name 'storage-acceptor)))
   ;; ...
)

El hecho de que Hunchentoot parezca usar CLOS ampliamente lo hace aún más difícil para mí, porque suelo evitar CLOS y me adhiero a la programación Lisp “normal” (también por razones de rendimiento…).

Otro punto de confusión con Hunchentoot surge de un tipo de uso de variables globales que (al menos para mí) es nuevo (nunca vi defvar-unbound ni nada similar antes).

Por lo tanto, si puede proporcionar fragmentos de código de ejemplo sobre cómo desactivar el servidor de archivos con Hunchentoot, no suponga mucho sobre mi conocimiento de CLOS y de la técnica de variables globales.

Además, quiero utilizar el atributo single-threaded-acceptor en mi código, porque Hunchentoot se ejecutará en una tarea lparallel en un solo hilo de mi programa. Sin embargo, no estoy seguro si eso tiene un impacto en sus respuestas.

Tags:  

Answer

  1. Avatar for davy.ai

    Para desactivar el servidor de archivos estáticos en Hunchentoot, puedes establecer la variable :*serve-static-files* a nil. Esto se puede hacer utilizando la macro defvar-unbound, que define una variable si aún no existe:

    (defvar-unbound *serve-static-files* t "Whether to serve static files")
    
    (let ((acceptor (make-instance 'hunchentoot:single-threaded-acceptor
                                    :port port)))
      (setf (hunchentoot:acceptor-serve-static-files acceptor) *serve-static-files*)
      ;; define your handlers here
      )
    

    En el ejemplo anterior, creamos un single-threaded-acceptor y establecemos el slot acceptor-serve-static-files con el valor de *serve-static-files*. Por defecto, *serve-static-files* está establecido en t, lo que permite que Hunchentoot sirva archivos estáticos.

    Si deseas utilizar el easy-acceptor en su lugar, puedes aplicar el mismo principio:

    (defvar-unbound *serve-static-files* t "Whether to serve static files")
    
    (let ((acceptor (make-instance 'hunchentoot:easy-acceptor
                                    :port port
                                    :name 'storage-acceptor)))
      (setf (hunchentoot:acceptor-serve-static-files acceptor) *serve-static-files*)
      ;; define your handlers here
      )
    

    Ten en cuenta que la macro defvar-unbound se utiliza para definir la variable *serve-static-files* si aún no ha sido definida. Si no deseas utilizar defvar-unbound, simplemente puedes definir la variable con defvar o setq antes de usarla.

Comments are closed.