部署Rails 5.0应用至AWS Elastic Beanstalk时遇权限及IO错误求助
我之前把Rails 5.0应用部署到AWS Elastic Beanstalk时,也碰到过和你几乎一样的问题,给你分享下我解决这两个问题的实操步骤:
问题1:资产编译失败(bundle写入权限错误)
从你提到的日志来看,核心问题是部署钩子运行时,没有权限写入/var/app/ondeck/.bundle/config路径,导致11_asset_compilation.sh执行失败。
解决方案:自定义部署钩子预调整目录权限
Elastic Beanstalk允许我们通过.ebextensions配置自定义脚本,在官方的资产编译钩子之前修正目录权限:
- 在你的Rails项目根目录创建
.ebextensions文件夹(如果还没有的话) - 在该文件夹下新建一个配置文件,比如
00_fix_bundle_permissions.config,写入以下内容:
files: "/opt/elasticbeanstalk/hooks/appdeploy/pre/09_fix_permissions.sh": mode: "000755" owner: root group: root content: | #!/usr/bin/env bash # 在资产编译前修正ondeck目录的所有权 chown -R webapp:webapp /var/app/ondeck
这个脚本会在官方的11_asset_compilation.sh之前执行,把/var/app/ondeck目录的所有权转移给运行应用的webapp用户,这样后续的bundle操作就有了写入权限。
另外,也可以检查下你的config/webpacker.yml,确保webpack的输出路径(比如public/packs)是Rails应用有权限写入的目录,避免额外的权限问题。
问题2:EB CLI init时选择不使用CodeCommit出现IOError
这个错误一般是EB CLI在本地创建配置文件时权限不足,或者CLI版本有bug导致的,我当时是这么解决的:
解决方案1:调整本地项目目录权限
如果是在Linux/macOS环境下,先确保你当前用户对项目目录有完整的读写权限:
chown -R $USER:$USER /path/to/your/rails/project chmod -R 755 /path/to/your/rails/project
解决方案2:更新EB CLI到最新版本
旧版本的EB CLI确实存在一些初始化流程的bug,更新到最新版大概率能解决:
# 如果你用pip安装的EB CLI pip install --upgrade awsebcli
解决方案3:手动创建EB配置文件
如果上面两种方法都不行,直接手动创建.elasticbeanstalk配置目录和文件:
- 在项目根目录创建
.elasticbeanstalk文件夹 - 新建
config.yml文件,填入你的应用信息(替换成自己的内容):
branch-defaults: master: environment: your-eb-environment-name global: application_name: your-eb-app-name default_region: us-east-1 # 替换成你的AWS区域,比如cn-north-1 profile: default workspace_type: Application
手动创建配置后,就可以跳过EB CLI的init流程,直接用eb deploy部署了。
内容的提问来源于stack exchange,提问作者HappyCry
相关产品推荐
相关产品推荐

