URI del archivo de salida de Azure Web Jobs con node.js
Frecuentes
Visto 933 equipos
0
Hoy comencé a usar Azure Web Jobs ejecutando un script node.js que genera un archivo json en el mismo directorio. Me gustaría consumir ese archivo usando http ahora, sin embargo, no puedo averiguar cuál es el uri correcto. Supuse que debe ser similar a donde están los registros (que, por cierto, me dicen que el trabajo se ejecutó correctamente), pero parece que no puedo encontrar el archivo json. ¿No debería ser algo como esto? https://SiteName.scm.azurewebsites.net/JobName/output.json
EDITAR: acabo de abrir el sitio usando Webmatrix, y aunque puedo encontrar los archivos de trabajo (en /App_Data/jobs/triggered/JobName), parece que el archivo json no se guardó, aunque el registro lo dice. ¿Alguien sabe si puede guardar archivos en un webjob como este?
fs.writeFile(outputFilename, JSON.stringify(output, null, 4), function(err) {
if(err) {
console.log(err);
} else {
console.log("JSON saved to " + outputFilename);
}
});
Por cierto. tiene que editar Web.config si desea servir JSON estático con Azure: http://blogs.msdn.com/b/africaapps/archive/2013/06/07/how-to-serve-static-json-files-from-a-windows-azure-website.aspx
1 Respuestas
4
La razón por la que el archivo no está junto a los archivos binarios de WebJob es que antes de que se invoque WebJob, primero se copia en un directorio temporal (%temp%\jobs\triggered\jobName\randomName
) y se ejecuta desde allí, de esta manera no se bloquea ningún archivo y puede actualizar los binarios de WebJob en cualquier momento.
La ruta adecuada para usar al conservar un archivo con un WebJob es usar el WEBROOT_PATH variable de entorno ya que tiene la ruta a su wwwroot.
Si desea que este archivo solo sea accesible de forma privada (ya que wwwroot es visible públicamente), puede subir un nivel, por ejemplo: %WEBROOT_PATH%/../output.json
.
Otra opción es utilizar: d:\home
, para el contexto wwwroot está en: d:\home\site\wwwroot
.
Para acceder a ese archivo utilice la siguiente url: https://SiteName.scm.azurewebsites.net/vfs/site/output.json y deberá proporcionar sus credenciales de implementación.
Respondido 14 Feb 14, 06:02
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas node.js azure azure-webjobs or haz tu propia pregunta.
Esto funcionará, pero realmente no debería estar escribiendo archivos en el sistema de archivos de su sitio web. Escríbalo en el almacenamiento de blobs en su lugar. - marca Rendle
Gracias, pude lograr lo que quería usando el uri de esta manera: var outputFilename = 'd:\\home\\site\\wwwroot\\output.json'; %WEBROOT_PATH% no funcionó para mí (probablemente lo usé de manera incorrecta...) @MarkRendle ¿cuáles son las ventajas de usar blob en este caso? ¿Todavía sería posible consumir el json usando un simple requerimiento http a un uri? - Thomas
@Thomas, parece que no puede usar la variable de entorno como parte de una ruta normal. (Al menos no con los métodos de la clase Path que probé). Sin embargo, puede obtener el valor a través de
Environment.GetEnvironmentVariable("WEBROOT_PATH")
o resuelve tus cadenas usandoEnvironment.ExpandEnvironmentVariables()
. - MEMARCASegún la documentos
in place
La opción está habilitada de forma predeterminada para los scripts de Node.js, por lo tanto, el script no se copia en una ubicación temporal. Sin embargo, esta es una respuesta antigua, por lo que es más que probable que el comportamiento haya cambiado (o que el OP estaba anulando esto). - JamesIntentando escribir a
WEBROOT_PATH
resultados enUnauthorizedAccessException
. - justin skiles