En mi código nodejs, estoy usando un módulo llamado node-cmd para usar el comando cs-import-documents del paquete de herramientas de búsqueda en la nube de Amazon.
En mi computadora local, está funcionando, puedo convertir mis archivos y luego cargar los archivos json en la búsqueda en la nube. Estoy trabajando con webstrom en Windows 10. Pero quiero que funcione en mi instancia ec2, así que creo una instancia ec2 de nodejs con beanstalk elásticos en aws y accedo a ella en ssh para intentar ejecutar mi código.
Entonces, ¿es el módulo el que no funciona en el ec2 o el comando? ¿Quizás hay otra manera mejor de hacer esto? El comando cs-import funciona cuando lo uso en la línea de comando.
Aquí está mi código:
function commandToJson(dest, fileName){ var res = fileName.replace("&", "^&"); var resJsonName = utils.basename(res); var commande = 'cs-import-documents --source "' + dest + '\\' + res + '" --output "' + dest + '\\' + resJsonName + '"'; console.log(commande); cmd.get( commande, function(data, err, stderr){ if (!err) { console.log('\n --------------retour console---------------- : \n\n',data); var jsonName = utils.basename(fileName); uploadToCloudsearch(relTempPath + jsonName + '1.json'); } else { console.log('error', err) } } );}
Aquí está el error que obtengo:
error { Error: Comando falló: /./cloudsearch/cloud-search-tools-v2-2.0.1.0-2014.10.27/bin/cs-import-documents --source "TEMP/Questions and Answers on CSDR" --output "TEMP/Preguntas y respuestas sobre CSDR"
at ChildProcess.exithandler (child_process.js:206:12) at emitTwo (events.js:106:13) at ChildProcess.emit (events.js:191:7) at maybeClose (internal/child_process.js:877:16) at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5)eliminado: falso, código: 1, señal: nulo, cmd: '/./cloudsearch/cloud-search-tools-v2-2.0.1.0-2014.10.27/bin/cs-import-documents --source "TEMP/Questions y respuestas sobre CSDR" --salida "TEMP/Preguntas y respuestas sobre CSDR"' }
logro resolverlo. Necesitaba configurar las variables para el perfil raíz y luego ejecutar mi código en la raíz.
Para codificarlo para que no necesite escribir export cada vez, recomendaría ponerlo en su .bashrc o .bash_profile para cada usuario correspondiente (Root, ec2-user, etc.). Estos archivos estarán en /home/ec2-user/ o /root/ por ejemplo. Puede ver lo que tiene actualmente configurado y activo simplemente escribiendo "env". Dependiendo de su configuración, puede ponerlo en cualquiera de estos. me gusta:
export CS_HOME=/usr/local/aws/bin/cloud-search-tools-v2-2.0.1.0-2014.10.27 export PATH=$PATH:$CS_HOME/bin export AWS_CREDENTIAL_FILE=/home/ec2-user/.aws/creds export CS_ENDPOINT=cloudsearch.us-east-1.amazonaws.com¿Cuál es la diferencia entre .bashrc, .bash_profile y .environment?