在AWS Linux安装CodeDeploy Agent时遇类型错误求助
AWS Linux安装CodeDeploy Agent时Ruby TypeError问题解决
错误详情
安装过程中触发如下类型错误:
/usr/share/ruby3.2/logger/log_device.rb:83:in `exist?': no implicit conversion of Array into String (TypeError) if File.exist?(path) ^^^^ from /usr/share/ruby3.2/logger/log_device.rb:83:in `set_dev' from /usr/share/ruby3.2/logger/log_device.rb:18:in `initialize' from /usr/share/ruby3.2/logger.rb:587:in `new' from /usr/share/ruby3.2/logger.rb:587:in `initialize' from ./install:43:in `new' from ./install:43:in `<main>'

问题原因
这是Ruby 3.2版本与旧版CodeDeploy Agent安装脚本的兼容性问题。安装脚本第43行初始化Logger时,传递了数组类型的日志路径参数,但Ruby 3.2的File.exist?方法只接受字符串参数,因此触发类型转换错误。
解决方法
1. 降级Ruby版本到3.1及以下
以Amazon Linux 2为例:
# 安装Ruby 3.1 sudo yum install ruby3.1 -y # 设置默认Ruby版本为3.1 sudo alternatives --set ruby /usr/bin/ruby3.1 # 重新执行安装脚本 sudo ./install auto
2. 修改安装脚本的日志初始化代码
打开install脚本,定位到第43行,将Logger初始化的数组参数改为字符串:
- 原代码类似:
logger = Logger.new([log_path]) - 修改为:
logger = Logger.new(log_path)
保存后重新执行./install。
3. 使用AWS官方适配Ruby 3.2的安装脚本
替换为对应AWS区域的最新安装命令(示例为us-east-1区域):
sudo yum install -y ruby wget wget https://aws-codedeploy-us-east-1.s3.us-east-1.amazonaws.com/latest/install chmod +x ./install sudo ./install auto
注意:将链接中的us-east-1替换为你的EC2实例所在区域。
内容的提问来源于stack exchange,提问作者Agha Shayan
相关产品推荐
相关产品推荐

