peter.bocian
Redix problem connecting mix to redis
Hi Elixir team! I am new to this forum. I currently moved to redis sentinel and although production is working fine I am having trouble getting my tests to pass. The error I am seeing is: ** (Mix) Could not start application scrivener: Scrivener.start(:normal, []) returned an error: shutdown: failed to start child: :worker ** (EXIT) an exception was raised: ** (MatchError) no match of right hand side value: {:error, {:EXIT, {%ArgumentError{message: "sentinel address should be specified as a URI or a keyword list, got: nil"}, [{Redix.StartOptions, :normalize_sentinel_address, 2, [file: 'lib/redix/start_options.ex', line: 122]}, {Enum, :"-map/2-lists^map/1-0-", 2, [file: 'lib/enum.ex', line: 1411]}, {Redix.StartOptions, :sanitize_sentinel_opts, 1, [file: 'lib/redix/start_options.ex', line: 79]}, {Redix.StartOptions, :maybe_sanitize_sentinel_opts, 1, [file: 'lib/redix/start_options.ex', line: 68]}, {Redix.StartOptions, :sanitize, 1, [file: 'lib/redix/start_options.ex', line: 51]}, {Redix.Connection, :start_link, 1, [file: 'lib/redix/connection.ex', line: 25]}, {:supervisor, :do_start_child_i, 3, [file: 'supervisor.erl', line: 385]}, {:supervisor, :handle_call, 3, [file: 'supervisor.erl', line: 410]}]}}} (poolboy 1.5.1) src/poolboy.erl:275: :poolboy.new_worker/1 . My test.exs is set up exactly like my prod.exs => ```config :scrivener, Scrivener.Endpoint,
http: [:inet6, port: {:system, “PORT”}],
server: false
Do not print debug messages in production
config :logger, level: :warn
Pull Redis sentinel settings from environment variables
{ redis_pool_size, original_value } = (System.get_env(“REDIS_POOL_SIZE”) || “5”) |> Integer.parse
{ redis_max_overflow, original_value } = (System.get_env(“REDIS_MAX_OVERFLOW”) || “2”) |> Integer.parse
{ redis_sentinel_timeout, original_value } = (System.get_env(“REDIS_SENTINEL_TIMEOUT”) || “10000”) |> Integer.parse
config :redix,
pool_size: redis_pool_size,
max_overflow: redis_max_overflow,
sentinel: [
sentinels: [
System.get_env(“REDIS_SENTINEL_HOST_A”),
System.get_env(“REDIS_SENTINEL_HOST_B”),
System.get_env(“REDIS_SENTINEL_HOST_C”)
],
group: System.get_env(“REDIS_SENTINEL_GROUP”),
timeout: redis_sentinel_timeout
]```. I can see it is a redix issue but not sure how to resolve.
Most Liked
al2o3cr
I suspect one of these environment variables isn’t set, that would explain finding a nil in sentinels
al2o3cr
Try inspecting the values in the config; something is not making it to Redix.
config :redix,
pool_size: redis_pool_size,
max_overflow: redis_max_overflow,
sentinel: [
sentinels: [
System.get_env(“REDIS_SENTINEL_HOST_A”),
System.get_env(“REDIS_SENTINEL_HOST_B”),
System.get_env(“REDIS_SENTINEL_HOST_C”)
] |> IO.inspect(label: "sentinel list"),
group: System.get_env(“REDIS_SENTINEL_GROUP”),
timeout: redis_sentinel_timeout
]
peter.bocian
Thank you
. It looks like when printing they were coming in as null. I hardcoded redis sentinel endpoints and following error: {%ArgumentError{message: “a host should be specified for each sentinel”}. When looking in redix docs, I see {Redix supports Redis Sentinel by passing a :sentinel
option to start_link/1 (or start_link/2) instead of :host and :port.}. Which is how it looks like I set it up.
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance








