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

Posted

技术标签:

【中文标题】您如何修复 AWS 弹性 beanstalk rails 资产预编译的文件权限错误?【英文标题】:How do you fix file permission error on AWS elastic beanstalk rails assets precompile? 【发布时间】:2016-09-30 01:51:59 【问题描述】:

在运行 bundle exec rake --trace assets:precompile 时,我在 AWS elastic 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 来授予用户访问权限。但是,我使用的是弹性 beantalk,我认为它不适用于新实例和未来的部署。有什么方法可以解决这个问题,使其适用于每个 EC2 实例上的所有部署?

【问题讨论】:

为什么投反对票?我应该提供更多信息吗? 我有这个确切的问题,你解决了吗? 我暂时通过预编译资产并在部署前提交到 repo 中解决了这个问题。部署本身也更快。 【参考方案1】:

我终于使用创建tmp 文件夹并使其可写的 eb 扩展命令修复了此问题(请参阅解决方法):

# <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"

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

【讨论】:

如果这不起作用,您可能需要将名称更改为 fix_temporary_folder_permissions.config【参考方案2】:

我已经体验过了。

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

sudo su bundle exec rake assets:precompile

【讨论】:

以上是关于您如何修复 AWS 弹性 beanstalk rails 资产预编译的文件权限错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AWS CLI 更新弹性 beanstalk 代码?

AWS Cloudformation:如何在 AWS 弹性 beanstalk 配置中引用多个安全组

如何使 DNS ARecord 指向 AWS 弹性 beanstalk 负载均衡器?

Github repo 如何在没有 .env 文件的情况下使用 AWS laravel 弹性 beanstalk 环境变量

AWS - 如何在不丢失实例和弹性 IP 的情况下暂停 Elastic Beanstalk 环境?

AWS 仅允许用户访问弹性 beanstalk 实例和存储