upstash redis is designed for serverless clients which makes it a good match for Rails caching but isn’t quite as good of a match for web sockets. The patch gets by, but perhaps installing redis in your own image is a better solution.
If you generated your Dockerfile with a fairly recent flyctl launch, I can walk you through the steps:
Add ruby-foreman redis-server to DEPLOY_PACKAGES.
Add the following some place after the last apt-get install:
# configure redis
RUN sed -i 's/^daemonize yes/daemonize no/' /etc/redis/redis.conf &&\
sed -i 's/^bind/# bind/' /etc/redis/redis.conf &&\
sed -i 's/^protected-mode yes/protected-mode no/' /etc/redis/redis.conf &&\
sed -i 's/^logfile/# logfile/' /etc/redis/redis.conf
Change the server task in lib/tasks/fly.rake to run
Bundler.with_original_env do
sh "foreman start --procfile=Procfile.fly"
end
Add a Procfile.fly:
web: bin/rails fly:server
redis: redis-server /etc/redis/redis.conf
Finally either change the REDIS_URL secret to redis://localhost:6379/1, or better yet delete the secret entirely and add REDIS_URL as an environment variable in fly.toml.
I realize this is a lot of manual steps, but I’m working on a Rails generator that will help you with changes such as these. Meanwhile, I’ve tested the above, and it works (and will be what I use for my personal application).