如何修复AWS弹性beanstalk rails资产预编译的文件权限错误?

时间:2016-05-31 21:38:27

标签: ruby-on-rails ruby amazon-web-services amazon-elastic-beanstalk

运行bundle exec rake --trace assets:precompile时,我在AWS弹性beanstalk上收到以下错误:

Command failed with status (1): [/opt/rubies/ruby-2.3.0/bin/ruby /opt/rubie...]

并在堆栈跟踪显示:

Errno::EACCES: Permission denied @ dir_s_mkdir - /var/app/current/tmp/requirejs

我需要更新权限,以便rake任务可以写入此tmp文件夹。我通常只在服务器上运行chmodchown来授予用户访问权限。但是,我关注弹性beanstalk,我不相信它会在新实例和未来部署上工作。修复此问题的方法是什么,以便适用于每个EC2实例上的所有部署?

2 个答案:

答案 0 :(得分:2)

我最后使用eb扩展命令修复了(参见解决),该命令创建tmp文件夹并使其可写:

# <project-root>/.ebextensions/fix_temporary_folder_permissions.yml
commands:
  01_set_tmp_permissions:
    command: "mkdir /var/app/ondeck/tmp; chmod 600 /var/app/ondeck/tmp"

注意:我不完全确定它在多个实例中是如何工作的,但我想他们都会在部署时执行自己的预编译。

答案 1 :(得分:1)

我已经体验过这一点。

您应该在当前应用文件夹root上使用/var/app/current权限运行以下内容:

  • sudo su
  • bundle exec rake assets:precompile