From d5bc6c718e2f45f6f0e37ec5e2a1d65d45924163 Mon Sep 17 00:00:00 2001 From: Andrew Tomaka Date: Fri, 17 Jan 2025 00:28:06 -0500 Subject: [PATCH] Setup solid_cable (#55) Reviewed-on: https://git.atomaka.com/atomaka/budget/pulls/55 --- Gemfile | 1 + Gemfile.lock | 6 ++++++ config/cable.yml | 20 ++++++++++++++++---- config/database.yml | 8 ++++++++ db/cable_schema.rb | 23 +++++++++++++++++++++++ 5 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 db/cable_schema.rb diff --git a/Gemfile b/Gemfile index c57898b..8f6e696 100644 --- a/Gemfile +++ b/Gemfile @@ -20,6 +20,7 @@ gem "jbuilder" # Use Redis adapter to run Action Cable in production # gem "redis", ">= 4.0.1" +gem "solid_cable" gem "solid_cache" gem "solid_queue" diff --git a/Gemfile.lock b/Gemfile.lock index dc00648..0db942b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -259,6 +259,11 @@ GEM rexml (~> 3.2, >= 3.2.5) rubyzip (>= 1.2.2, < 3.0) websocket (~> 1.0) + solid_cable (3.0.5) + actioncable (>= 7.2) + activejob (>= 7.2) + activerecord (>= 7.2) + railties (>= 7.2) solid_cache (1.0.6) activejob (>= 7.2) activerecord (>= 7.2) @@ -327,6 +332,7 @@ DEPENDENCIES rails! rubocop-rails-omakase selenium-webdriver + solid_cable solid_cache solid_queue sqlite3 (>= 1.4) diff --git a/config/cable.yml b/config/cable.yml index b70279b..7866c8d 100644 --- a/config/cable.yml +++ b/config/cable.yml @@ -1,10 +1,22 @@ +# Async adapter only works within the same process, so for manually triggering cable updates from a console, +# and seeing results in the browser, you must do so from the web console (running inside the dev process), +# not a terminal started via bin/rails console! Add "console" to any action or any ERB template view +# to make the web console appear. development: - adapter: async + adapter: solid_cable + connects_to: + database: + writing: cable + polling_interval: 0.1.seconds + message_retention: 1.day test: adapter: test production: - adapter: redis - url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %> - channel_prefix: family_budget_production + adapter: solid_cable + connects_to: + database: + writing: cable + polling_interval: 0.1.seconds + message_retention: 1.day diff --git a/config/database.yml b/config/database.yml index c5a9bfb..e1f09ac 100644 --- a/config/database.yml +++ b/config/database.yml @@ -21,6 +21,10 @@ development: <<: *default database: storage/development_queue.sqlite3 migrations_paths: db/queue_migrate + cable: + <<: *default + database: storage/development_cable.sqlite3 + migrations_paths: db/cable_migrate # Warning: The database defined as "test" will be erased and @@ -42,3 +46,7 @@ production: <<: *default database: storage/production_queue.sqlite3 migrations_paths: db/queue_migrate + cable: + <<: *default + database: storage/production_cable.sqlite3 + migrations_paths: db/cable_migrate diff --git a/db/cable_schema.rb b/db/cable_schema.rb new file mode 100644 index 0000000..3aefc38 --- /dev/null +++ b/db/cable_schema.rb @@ -0,0 +1,23 @@ +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# This file is the source Rails uses to define your schema when running `bin/rails +# db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to +# be faster and is potentially less error prone than running all of your +# migrations from scratch. Old migrations may fail to apply correctly if those +# migrations use external dependencies or application code. +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema[8.1].define(version: 1) do + create_table "solid_cable_messages", force: :cascade do |t| + t.binary "channel", limit: 1024, null: false + t.integer "channel_hash", limit: 8, null: false + t.datetime "created_at", null: false + t.binary "payload", limit: 536870912, null: false + t.index ["channel"], name: "index_solid_cable_messages_on_channel" + t.index ["channel_hash"], name: "index_solid_cable_messages_on_channel_hash" + t.index ["created_at"], name: "index_solid_cable_messages_on_created_at" + end +end