9

Я использую Node.js и мне нужно сохранить файлы в tmp-каталог в моем приложении. Проблема в том, что Elastic Beanstalk не устанавливает каталог приложения для записи в приложении. Поэтому, когда я пытаюсь создать временную папку, я получаю эту ошибкуКак создать каталог «tmp» с помощью эластичного 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) 

Я попробовал несколько вещей, таких как app-setup.sh сценарий в .ebextensions/скриптов/app-setup.sh, который выглядит следующим образом

#!/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 

Как создать файл с именем 02_env.config в .ebextensions, который выглядит следующим

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

Ни похоже на работу. Как создать каталог tmp в моем приложении, доступном для записи?

+0

Просто любопытно, почему вы хотите, чтобы записать в файл в системе без гражданства? –

ответ

6

Недавно я столкнулся с одной и той же проблемой с .NET-приложением, когда приложение терпело неудачу, поскольку оно не могло быть записано в каталог даже после того, как я установил разрешения.

Я обнаружил, что после завершения всего процесса .ebextensions последним шагом было обновление разрешений для веб-контейнеров, которое закончило переписывание изменений разрешений для ebextensions.

Чтобы решить эту проблему, я переместил каталог за пределы веб-контейнера и обновил приложение, чтобы там написать.

В вашем случае я бы предложил /tmp

+0

Это помогло мне! Я не хочу отмечать его как принятый ответ, так как он фактически не решает проблему (возможность записи в каталог приложения должна быть возможной), но если ответов нет, я дам вам кредит. –

+0

Вам удалось найти решение для этого Дэвида? –

Смежные вопросы