部署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
相关产品推荐
相关产品推荐

