9

Sto utilizzando Node.js e devo salvare i file in una directory tmp all'interno della mia app. Il problema è che Elastic Beanstalk non imposta la directory dell'app per essere scrivibile dall'app. Così, quando cerco di creare la directory temp ottengo questo erroreCome posso creare una directory "tmp" con Elastic Beanstalk?

fs.js:653 
    return binding.mkdir(pathModule._makeLong(path), 
       ^
Error: EACCES, permission denied '/var/app/tmp/' 
    at Object.fs.mkdirSync (fs.js:653:18) 
    at Promise.<anonymous> (/var/app/current/routes/auth.js:116:18) 
    at Promise.<anonymous> (/var/app/current/node_modules/mongoose/node_modules/mpromise/lib/promise.js:177:8) 
    at Promise.emit (events.js:95:17) 
    at Promise.emit (/var/app/current/node_modules/mongoose/node_modules/mpromise/lib/promise.js:84:38) 
    at Promise.fulfill (/var/app/current/node_modules/mongoose/node_modules/mpromise/lib/promise.js:97:20) 
    at /var/app/current/node_modules/mongoose/lib/query.js:1394:13 
    at model.Document.init (/var/app/current/node_modules/mongoose/lib/document.js:250:11) 
    at completeOne (/var/app/current/node_modules/mongoose/lib/query.js:1392:10) 
    at Object.cb (/var/app/current/node_modules/mongoose/lib/query.js:1151:11) 

Ho provato diverse cose, come uno script app-setup.sh entro .ebextensions/scripts/app-setup.sh che assomiglia a questo

#!/bin/bash 

# Check if this is the very first time that this script is running 
if ([ ! -f /root/.not-a-new-instance.txt ]) then 
    newEC2Instance=true 
fi 



# Get the directory of 'this' script 
dirCurScript=$(dirname "${BASH_SOURCE[0]}") 

# Fix the line endings of all files 
find $dirCurScript/../../ -type f | xargs dos2unix -q -k 

# Get the app configuration environment variables 
source $dirCurScript/../../copy-to-slash/root/.elastic-beanstalk-app 
export ELASTICBEANSTALK_APP_DIR="/$ELASTICBEANSTALK_APP_NAME" 

appName="$ELASTICBEANSTALK_APP_NAME" 
dirApp="$ELASTICBEANSTALK_APP_DIR" 

dirAppExt="$ELASTICBEANSTALK_APP_DIR/.ebextensions" 
dirAppTmp="$ELASTICBEANSTALK_APP_DIR/tmp" 

dirAppData="$dirAppExt/data" 
dirAppScript="$dirAppExt/scripts" 


# Create tmp directory 
mkdir -p $dirApp/tmp 

# Set permissions 
chmod 777 $dirApp 
chmod 777 $dirApp/tmp 

# Ensuring all the required environment settings after all the above setup 
if ([ -f ~/.bash_profile ]) then 
    source ~/.bash_profile 
fi 

# If new instance, now it is not new anymore 
if ([ $newEC2Instance ]) then 
    echo -n "" > /root/.not-a-new-instance.txt 
fi 


# Print the finish time of this script 
echo $(date) 


# Always successful exit so that beanstalk does not stop creating the environment 
exit 0 

oltre a creare un file chiamato 02_env.config entro .ebextensions che assomiglia a questo

# .ebextensions/99datadog.config 
    container_commands: 
     01mkdir: 
      command: "mkdir /var/app/tmp" 
     02chmod: 
      command: "chmod 777 /var/app/tmp" 

Né sembra funzionare. Come posso creare una directory tmp all'interno della mia app che sia scrivibile?

+0

Solo per curiosità, perché si vuole scrivere su un file in un sistema senza stato? –

risposta

6

Recentemente ho riscontrato lo stesso problema con un'applicazione .NET in cui l'applicazione non funzionava perché non è stato possibile scrivere in una directory, anche dopo aver impostato le autorizzazioni.

Quello che ho trovato è che dopo che è stato completato l'intero processo .ebextensions, il passaggio finale è stato un aggiornamento delle autorizzazioni del contenitore Web che ha finito per sovrascrivere le mie modifiche alle autorizzazioni di ebextensions.

Per risolvere il problema, ho spostato la directory all'esterno del contenitore Web e aggiornato l'applicazione per scrivere lì.

Nel tuo caso vorrei suggerire /tmp

+0

Questo mi ha aiutato tantissimo! Sono riluttante a contrassegnarlo come la risposta accettata in quanto in realtà non risolve il problema (essere in grado di scrivere nella directory dell'app dovrebbe essere possibile) ma se non vengono fornite altre risposte ti darò il merito. –

+0

Sei riuscito a trovare una soluzione per questo David? –

Problemi correlati