with one click
sm-host-setup
// Use when setting up SourceMonitor in a host Rails application, including gem installation, engine mounting, migration copying, initializer creation, and verifying the install works.
// Use when setting up SourceMonitor in a host Rails application, including gem installation, engine mounting, migration copying, initializer creation, and verifying the install works.
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | sm-host-setup |
| description | Use when setting up SourceMonitor in a host Rails application, including gem installation, engine mounting, migration copying, initializer creation, and verifying the install works. |
| allowed-tools | Read, Write, Edit, Bash, Glob, Grep |
Guides integration of the SourceMonitor engine into a host Rails application.
sm-upgrade skill for full upgrade workflow)| Requirement | Minimum | How to Check |
|---|---|---|
| Ruby | 3.4+ | ruby -v |
| Rails | 8.0+ | bin/rails about |
| PostgreSQL | 14+ | psql --version |
| Node.js | 18+ | node -v |
| Solid Queue | >= 0.3, < 3.0 | Check host Gemfile |
| Solid Cable or Redis | Solid Cable >= 3.0 | Check host Gemfile |
The engine ships a guided installer that handles every step interactively.
# From the host app root:
bundle add source_monitor --version "~> 0.3.0"
bundle install
bin/source_monitor install
The guided workflow:
DependencyChecker/source_monitor)gem "source_monitor" in Gemfile, runs bundle installnpm install if package.json existsbin/rails generate source_monitor:install --mount-path=...bin/rails db:migrateNon-interactive mode:
bin/source_monitor install --yes
# 1. Add the gem
gem "source_monitor", "~> 0.3.0" # in Gemfile
bundle install
# 2. Run the install generator (mounts engine, creates initializer, configures recurring jobs)
bin/rails generate source_monitor:install --mount-path=/source_monitor
# 3. Copy engine migrations
bin/rails railties:install:migrations FROM=source_monitor
# 4. Apply migrations
bin/rails db:migrate
# 5. Start background workers (recurring jobs configured automatically in config/recurring.yml)
bin/rails solid_queue:start
# Note: The generator automatically patches Procfile.dev with a jobs: entry
# and adds recurring_schedule to your queue.yml dispatcher config.
# Re-run the generator if these were not applied: bin/rails generate source_monitor:install
# 6. Verify
bin/source_monitor verify
# Gemfile
gem "source_monitor", github: "dchuk/source_monitor"
The generator (SourceMonitor::Generators::InstallGenerator) performs five actions:
Mounts the engine in config/routes.rb:
mount SourceMonitor::Engine, at: "/source_monitor"
Skips if already mounted. The mount path is configurable via --mount-path.
Creates the initializer at config/initializers/source_monitor.rb:
Uses the template at lib/generators/source_monitor/install/templates/source_monitor.rb.tt. Skips if the file already exists.
Configures recurring jobs in config/recurring.yml:
Adds entries for ScheduleFetchesJob (every minute), scrape scheduling (every 2 minutes), ItemCleanupJob (2am daily), and LogCleanupJob (3am daily). If the file doesn't exist, creates it with default: &default and environment sections. If it exists, merges entries without overwriting. Skips if SourceMonitor entries are already present.
Patches Procfile.dev with a jobs: entry for Solid Queue:
Creates the file with web: and jobs: entries if it does not exist. Appends a jobs: entry if the file exists but lacks one. Skips if a jobs: entry is already present.
Patches queue.yml dispatcher with recurring_schedule: config/recurring.yml:
Adds the recurring_schedule key to each dispatcher entry in config/queue.yml. If no dispatchers section exists, creates a default one. Skips if recurring_schedule is already configured. Skips if config/queue.yml does not exist.
Re-running the generator is safe and idempotent.
After installation, review and customize the initializer. Key areas:
| Section | Purpose |
|---|---|
| Queue settings | Queue names, concurrency, namespace |
| Authentication | authenticate_with, authorize_with hooks |
| HTTP client | Timeouts, proxy, retries |
| Fetching | Adaptive scheduling intervals and factors |
| Health | Auto-pause/resume thresholds |
| Scrapers | Register custom scraper adapters |
| Retention | Item age limits and pruning strategy |
| Events | Lifecycle callbacks for integration |
| Models | Table prefix, concerns, validations |
| Realtime | Action Cable adapter (Solid Cable/Redis) |
See the sm-configure skill for full configuration reference.
# CLI verification
bin/source_monitor verify
# Rake task verification
bin/rails source_monitor:setup:verify
# Prerequisite check only
bin/rails source_monitor:setup:check
Verification checks Solid Queue workers and Action Cable health. Non-zero exit on failure.
Enable telemetry logging:
SOURCE_MONITOR_SETUP_TELEMETRY=true bin/source_monitor verify
# Logs to log/source_monitor_setup.log
When Devise is detected, the guided installer offers to wire authentication hooks:
config.authentication.authenticate_with :authenticate_user!
config.authentication.authorize_with ->(controller) {
controller.current_user&.respond_to?(:admin?) ? controller.current_user.admin? : true
}
config.authentication.current_user_method = :current_user
config.authentication.user_signed_in_method = :user_signed_in?
gem "source_monitor" from Gemfile, bundle installconfig/initializers/source_monitor.rbmount SourceMonitor::Engine from config/routes.rbbin/rails db:migrate:down VERSION=<timestamp> for each engine migration| Scenario | Status |
|---|---|
| Rails 8 full-stack app | Supported |
| Rails 8 API-only app | Supported |
| Dedicated Solid Queue database | Supported |
| Redis-backed Action Cable | Supported |
| File | Purpose |
|---|---|
lib/source_monitor/setup/workflow.rb | Guided installer orchestration |
lib/generators/source_monitor/install/install_generator.rb | Rails generator |
lib/generators/source_monitor/install/templates/source_monitor.rb.tt | Initializer template |
lib/source_monitor/setup/initializer_patcher.rb | Post-install patching |
lib/source_monitor/setup/procfile_patcher.rb | Procfile.dev patching for guided workflow |
lib/source_monitor/setup/queue_config_patcher.rb | Queue config patching for guided workflow |
lib/source_monitor/setup/verification/runner.rb | Verification runner |
lib/source_monitor/engine.rb | Engine configuration and initializers |
docs/setup.md | Full setup documentation |
docs/troubleshooting.md | Common fixes |
docs/setup.md -- Complete setup workflow documentationdocs/configuration.md -- Configuration referencedocs/troubleshooting.md -- Common issues and fixessm-upgrade skill -- Upgrade workflow for gem version updatesAfter setup, verify with:
bin/source_monitor verify -- Checks Solid Queue and Action Cablebin/rails source_monitor:upgrade -- see the sm-upgrade skillOptional system test for host apps using Devise:
# test/system/source_monitor_setup_test.rb
require "application_system_test_case"
class SourceMonitorSetupTest < ApplicationSystemTestCase
test "signed in admin can reach SourceMonitor" do
user = users(:admin)
sign_in user
visit "/source_monitor"
assert_text "SourceMonitor Dashboard"
end
end
gem "source_monitor" added to Gemfilebundle install completedbin/rails generate source_monitor:install)config/recurring.ymlProcfile.dev includes jobs: entry for Solid Queue (handled by generator)recurring_schedule: config/recurring.yml (handled by generator)bin/source_monitor verify passes