You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 17:42:15