Ruby on rails Rails AWS/EB tmp文件权限

Ruby on rails Rails AWS/EB tmp文件权限,ruby-on-rails,amazon-web-services,amazon-elastic-beanstalk,Ruby On Rails,Amazon Web Services,Amazon Elastic Beanstalk,我正在尝试在AWS/EB上运行一个Rails应用程序,该应用程序创建一个临时文件。当我在开发环境中运行时,代码可以正常工作,但在生产环境中它失败了。以下是执行的代码: v_index_file_save = Tempfile.new(['index','.lst']) 我收到以下错误消息: Errno::EACCES: Permission denied @ dir_s_mkdir - /var/app/current/tmp/1495598860-11267-0001-8597 我发

我正在尝试在AWS/EB上运行一个Rails应用程序,该应用程序创建一个临时文件。当我在开发环境中运行时,代码可以正常工作,但在生产环境中它失败了。以下是执行的代码:

  v_index_file_save = Tempfile.new(['index','.lst'])
我收到以下错误消息:

Errno::EACCES: Permission denied @ dir_s_mkdir - /var/app/current/tmp/1495598860-11267-0001-8597 
我发现一个条目建议创建一个预编译脚本来更改我的/tmp目录上的权限。以下是scipt:

commands:
  01_set_tmp_permissions:
    command: "chmod 0777 /var/app/current/tmp"

Deploy似乎工作正常,但是/tmp/目录上的权限没有更新。有什么建议吗?

首先,您的
命令没有按您的要求执行的原因是它运行得太早。如果你查一下,上面写着

命令按名称的字母顺序进行处理,并运行 在设置应用程序和web服务器之前 提取版本文件

所以现在发生的是,您正在更改对包含即将被替换的应用程序版本的目录的权限。(EB将新版本提取到
/var/app/ondeck
,删除
/var/app/current
,最后将
/var/app/ondeck
重命名为
/var/app/current

您可能会更幸运地使用这样的:

container_commands:
  01_set_tmp_permissions:
    command: "chmod 0777 /var/app/ondeck/tmp"
container_commands:
  01_set_tmp_permissions:
    command: "chmod -R go+w /var/app/staging/tmp/cache"
容器命令稍后在部署中运行,因此它可能会执行您想要的操作


也就是说,您应该已经拥有
/var/app/current/tmp
的写访问权限。运行
ls-ld/var/app/current/tmp
时会发生什么?你的应用程序是以什么用户的身份运行的?

首先,你的
命令没有按你的意愿运行的原因是它运行得太早了。如果你查一下,上面写着

命令按名称的字母顺序进行处理,并运行 在设置应用程序和web服务器之前 提取版本文件

所以现在发生的是,您正在更改对包含即将被替换的应用程序版本的目录的权限。(EB将新版本提取到
/var/app/ondeck
,删除
/var/app/current
,最后将
/var/app/ondeck
重命名为
/var/app/current

您可能会更幸运地使用这样的:

container_commands:
  01_set_tmp_permissions:
    command: "chmod 0777 /var/app/ondeck/tmp"
container_commands:
  01_set_tmp_permissions:
    command: "chmod -R go+w /var/app/staging/tmp/cache"
容器命令稍后在部署中运行,因此它可能会执行您想要的操作

也就是说,您应该已经拥有
/var/app/current/tmp
的写访问权限。运行
ls-ld/var/app/current/tmp
时会发生什么?你的应用程序是以什么用户的身份运行的?

因为我在2020年还是遇到了这个问题,而且这个修复程序对我来说不太管用,所以我想我应该和大家分享一下

在重新阅读关于容器命令的EB AWS文档后,我更改了
/var/app/ondeck/tmp
的权限,而不是
/var/app/staging/tmp

指定的命令以root用户身份运行,并按名称的字母顺序进行处理。容器命令从暂存目录运行,在将源代码部署到应用程序服务器之前,将在该目录中提取源代码。在将源代码部署到其最终位置时,将包括使用容器命令对暂存目录中的源代码所做的任何更改

最后,我的扩展如下所示:

container_commands:
  01_set_tmp_permissions:
    command: "chmod 0777 /var/app/ondeck/tmp"
container_commands:
  01_set_tmp_permissions:
    command: "chmod -R go+w /var/app/staging/tmp/cache"
而且它有效!如:关于下一个问题:D

另外,Shopify/bootsnap中有一个关于此问题的线程,供参考:。我也在那里发布了我的解决方案。

因为我在2020年还是遇到了这个问题,而且这个解决方案对我来说不太管用,所以我想我应该分享一下

在重新阅读关于容器命令的EB AWS文档后,我更改了
/var/app/ondeck/tmp
的权限,而不是
/var/app/staging/tmp

指定的命令以root用户身份运行,并按名称的字母顺序进行处理。容器命令从暂存目录运行,在将源代码部署到应用程序服务器之前,将在该目录中提取源代码。在将源代码部署到其最终位置时,将包括使用容器命令对暂存目录中的源代码所做的任何更改

最后,我的扩展如下所示:

container_commands:
  01_set_tmp_permissions:
    command: "chmod 0777 /var/app/ondeck/tmp"
container_commands:
  01_set_tmp_permissions:
    command: "chmod -R go+w /var/app/staging/tmp/cache"
而且它有效!如:关于下一个问题:D

另外,Shopify/bootsnap中有一个关于此问题的线程,供参考:。我也在那里发布了我的解决方案