9

Tôi đang sử dụng Node.js và cần lưu tệp vào thư mục tmp trong ứng dụng của mình. Vấn đề là Elastic Beanstalk không đặt thư mục ứng dụng để có thể ghi bởi ứng dụng. Vì vậy, khi tôi cố gắng để tạo ra các thư mục tạm Tôi nhận được lỗi nàyLàm cách nào để tạo thư mục "tmp" với Cây đậu Đàn hồi?

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) 

Tôi đã thử một vài điều như một kịch bản app-setup.sh trong .ebextensions/scripts/app-setup.sh trông như thế này

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

cũng như tạo ra một tập tin gọi là 02_env.config trong .ebextensions trông như thế này

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

Không có vẻ làm việc. Làm thế nào tôi có thể tạo một thư mục tmp trong ứng dụng của tôi có thể ghi được?

+0

Chỉ cần tò mò, tại sao bạn muốn ghi vào tệp trong hệ thống không trạng thái? –

Trả lời

6

Gần đây tôi đã gặp phải sự cố tương tự với ứng dụng .NET nơi ứng dụng bị lỗi vì không thể ghi vào thư mục, ngay cả sau khi tôi đã đặt quyền.

Những gì tôi thấy là sau khi toàn bộ quá trình .ebextensions đã hoàn tất, bước cuối cùng là cập nhật quyền truy cập vùng chứa web đã kết thúc việc ghi đè quyền cấp phép ebextensions của tôi.

Để giải quyết, tôi đã chuyển thư mục bên ngoài vùng chứa web và cập nhật ứng dụng để viết ở đó thay thế.

Trong trường hợp của bạn, tôi sẽ đề xuất /tmp

+0

Điều này đã giúp tôi rất nhiều! Tôi do dự để đánh dấu nó như là câu trả lời chấp nhận vì nó không thực sự giải quyết vấn đề (có thể viết thư mục ứng dụng nên có thể) nhưng nếu không có câu trả lời khác được cung cấp, tôi sẽ cung cấp cho bạn tín dụng. –

+0

Bạn có tìm ra giải pháp cho David này không? –

Các vấn đề liên quan