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

部署Ruby 3.2.2至AWS Elastic Beanstalk遇:expires_in未知关键字错误

问题描述

将Ruby 3.2.2应用部署至AWS Elastic Beanstalk(基于64位Amazon Linux 2023的Ruby 3.2平台)时,出现以下错误:

[29074] unknown keyword: :expires_in
[29074] /var/app/current/vendor/bundle/ruby/3.2.0/gems/redis-client-0.22.2/lib/redis_client/config.rb:21:in `initialize'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/redis-client-0.22.2/lib/redis_client/config.rb:207:in `initialize'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/redis-client-0.22.2/lib/redis_client.rb:166:in `new'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/redis-client-0.22.2/lib/redis_client.rb:166:in `config'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/redis-5.2.0/lib/redis/client.rb:23:in `config'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/redis-5.2.0/lib/redis.rb:142:in `initialize_client'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/redis-5.2.0/lib/redis.rb:73:in `initialize'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/redis-store-1.10.0/lib/redis/store.rb:21:in `initialize'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/redis-store-1.10.0/lib/redis/store/factory.rb:27:in `new'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/redis-store-1.10.0/lib/redis/store/factory.rb:27:in `create'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/redis-store-1.10.0/lib/redis/store/factory.rb:10:in `create'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/redis-activesupport-5.3.0/lib/active_support/cache/redis_store.rb:71:in `initialize'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/activesupport-7.1.3.3/lib/active_support/cache.rb:94:in `new'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/activesupport-7.1.3.3/lib/active_support/cache.rb:94:in `lookup_store'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/railties-7.1.3.3/lib/rails/application/bootstrap.rb:80:in `block in <module:Bootstrap>'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/railties-7.1.3.3/lib/rails/initializable.rb:32:in `instance_exec'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/railties-7.1.3.3/lib/rails/initializable.rb:32:in `run'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/railties-7.1.3.3/lib/rails/initializable.rb:61:in `block in run_initializers'
    /usr/share/ruby3.2/tsort.rb:228:in `block in tsort_each'
    /usr/share/ruby3.2/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component'
    /usr/share/ruby3.2/tsort.rb:431:in `each_strongly_connected_component_from'
    /usr/share/ruby3.2/tsort.rb:349:in `block in each_strongly_connected_component'
    /usr/share/ruby3.2/tsort.rb:347:in `each'
    /usr/share/ruby3.2/tsort.rb:347:in `call'
    /usr/share/ruby3.2/tsort.rb:347:in `each_strongly_connected_component'
    /usr/share/ruby3.2/tsort.rb:226:in `tsort_each'
    /usr/share/ruby3.2/tsort.rb:205:in `tsort_each'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/railties-7.1.3.3/lib/rails/initializable.rb:60:in `run_initializers'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/railties-7.1.3.3/lib/rails/application.rb:426:in `initialize!'
    /var/app/current/config/environment.rb:5:in `<top (required)>'
    config.ru:3:in `require_relative'
    config.ru:3:in `block in <main>'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/rack-3.0.11/lib/rack/builder.rb:103:in `eval'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/rack-3.0.11/lib/rack/builder.rb:103:in `new_from_string'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/rack-3.0.11/lib/rack/builder.rb:94:in `load_file'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/rack-3.0.11/lib/rack/builder.rb:64:in `parse_file'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/puma-6.4.2/lib/puma/configuration.rb:368:in `load_rackup'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/puma-6.4.2/lib/puma/configuration.rb:290:in `app'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/puma-6.4.2/lib/puma/runner.rb:173:in `app'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/puma-6.4.2/lib/puma/runner.rb:177:in `start_server'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/puma-6.4.2/lib/puma/cluster/worker.rb:60:in `run'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/puma-6.4.2/lib/puma/cluster.rb:216:in `worker'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/puma-6.4.2/lib/puma/cluster.rb:97:in `block in spawn_worker'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/puma-6.4.2/lib/puma/cluster.rb:97:in `fork'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/puma-6.4.2/lib/puma/cluster.rb:97:in `spawn_worker'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/puma-6.4.2/lib/puma/cluster.rb:81:in `block in spawn_workers'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/puma-6.4.2/lib/puma/cluster.rb:74:in `times'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/puma-6.4.2/lib/puma/cluster.rb:74:in `spawn_workers'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/puma-6.4.2/lib/puma/cluster.rb:173:in `check_workers'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/puma-6.4.2/lib/puma/cluster.rb:455:in `run'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/puma-6.4.2/lib/puma/launcher.rb:194:in `run'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/puma-6.4.2/lib/puma/cli.rb:75:in `run'
    /var/app/current/vendor/bundle/ruby/3.2.0/gems/puma-6.4.2/bin/puma:10:in `<top (required)>'
    /var/app/current/vendor/bundle/ruby/3.2.0/bin/puma:25:in `load'
    /var/app/current/vendor/bundle/ruby/3.2.0/bin/puma:25:in `<main>'
[29074] Early termination of worker

经排查,错误来自/config/environments/production.rb中的配置:

config.cache_store = :redis_store, "#{ENV["REDIS_URL"]}/1/cache", { expires_in: 90.minutes }
解决方案

错误原因是expires_in参数被错误传递给Redis客户端初始化方法,该参数属于Active Support Cache的配置项,并非Redis客户端的合法参数。需将缓存相关配置与Redis连接配置分离,修改方式如下:

方式一:嵌套参数结构

config.cache_store = :redis_store, "#{ENV["REDIS_URL"]}/1/cache", { redis: { expires_in: 90.minutes } }

方式二:统一哈希配置(更清晰)

config.cache_store = :redis_store, {
  url: "#{ENV["REDIS_URL"]}/1/cache",
  expires_in: 90.minutes
}

原理说明

  • 使用:redis_store作为缓存存储时,连接相关配置会被交给Redis客户端,而缓存行为配置(如expires_in)需明确归属到缓存层配置中。
  • 新版本的redis-activesupport和redis-store要求分离缓存专属参数与Redis连接参数,避免参数被错误传入Redis客户端初始化流程。

内容的提问来源于stack exchange,提问作者lei lei

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 12:25:54