Elastic Beanstalkを介してデフォルトのクリーンなnode.jsアプリをプロビジョニングし、node.jsスクリプトがプロジェクトディレクトリ(npm install
)内で/var/app/current/deploy-dist
を実行しようとしていますが、次の権限エラーがスローされます:
npm WARN locking Error: EACCES: permission denied, open '/tmp/.npm/_locks/staging-f212e8d64a01707f.lock'
npm WARN locking at Error (native)
npm WARN locking /tmp/.npm/_locks/staging-f212e8d64a01707f.lock failed { Error: EACCES: permission denied, open '/tmp/.npm/_locks/staging-f212e8d64a01707f.lock'
npm WARN locking at Error (native)
npm WARN locking errno: -13,
npm WARN locking code: 'EACCES',
npm WARN locking syscall: 'open',
npm WARN locking path: '/tmp/.npm/_locks/staging-f212e8d64a01707f.lock' }
npm WARN deploy-dist No description
npm WARN deploy-dist No repository field.
npm WARN deploy-dist No license field.
npm ERR! Linux 4.4.35-33.55.amzn1.x86_64
npm ERR! argv "/opt/elasticbeanstalk/node-install/node-v6.9.1-linux-x64/bin/node" "/opt/elasticbeanstalk/node-install/node-v6.9.1-linux-x64/bin/npm" "install"
npm ERR! node v6.9.1
npm ERR! npm v3.10.8
npm ERR! path /tmp/.npm/_locks/staging-f212e8d64a01707f.lock
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall open
npm ERR! Error: EACCES: permission denied, open '/tmp/.npm/_locks/staging-f212e8d64a01707f.lock'
npm ERR! at Error (native)
npm ERR! { Error: EACCES: permission denied, open '/tmp/.npm/_locks/staging-f212e8d64a01707f.lock'
npm ERR! at Error (native)
npm ERR! errno: -13,
npm ERR! code: 'EACCES',
npm ERR! syscall: 'open',
npm ERR! path: '/tmp/.npm/_locks/staging-f212e8d64a01707f.lock' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.
npm ERR! Please include the following file with any support request:
npm ERR! /var/app/current/deploy-dist/npm-debug.log
package.json
は次のとおりです。
{
"dependencies": {
"node-fetch": "^1.3.3"
}
}
Sudoでnpm install
を実行することは明らかに機能しますが、解決策として回避することをお勧めします。
NPM_CONFIG_PREFIX
を~
のディレクトリに npm
docs Suggestion のように設定しても機能せず、問題が解決しません。
問題は/tmp/.npm
の不正な権限にあると思われます。
drwxr-xr-x 114 root root 4.0K Dec 27 17:04 .npm
単純なnpm install
がそのままで機能することを期待していたので、これは混乱を招きます。
UPDATE:プロジェクトディレクトリにnode_modules
フォルダがすでに含まれている必要はありませんが、それを削除してnpm install
を実行しても、修理する。
私はこの問題を抱えていました! ebextensions を使用して、tmp/npm/.locks
フォルダーの権限を変更する デプロイ後のスクリプト を作成できます。
Node.jsプロジェクトで、.ebextensions
フォルダーをまだ作成していない場合は作成します。次に、新しい構成ファイルを追加します。 00_create_postdeploy_script.config
、次のyaml:
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/99_fix_node_permissions.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
chown -R nodejs:nodejs /tmp/.npm/_locks/
デプロイすると、/opt/elasticbeanstalk/hooks/appdeploy/post
というスクリプトが99_fix_node_permissions.sh
に作成され、次のようになります。
#!/usr/bin/env bash
chown -R nodejs:nodejs /tmp/.npm/_locks/
そのpost
フォルダーにあるため、アプリのデプロイ後に自動的に実行され、必要に応じて権限を変更します。
EDIT:whole.npm
フォルダの権限に問題がある場合、次に、設定ファイルの最後の行を次のように変更する必要があります。
chown -R nodejs:nodejs /tmp/.npm/
私は過去にこの問題を抱えていましたが、私の場合、キャッシュを消去すると問題が解決しました。これをお試しください
npm cache clean
それが役に立てば幸い。