Copy the Chatwoot (v4.14.0) frontend runnable subset into frontend/ for customization: - app/javascript/ (Vue SPA: dashboard, widget, sdk, portal, superadmin) - app/views/ (ERB templates for vite-plugin-ruby entrypoint resolution) - app/helpers/, app/assets/ (Rails view helpers, static assets) - enterprise/ (Enterprise edition frontend overlay) - config/vite.json, vite.config.ts, bin/vite (Vite-Rails toolchain) - package.json, pnpm-lock.yaml, tailwind/postcss/eslint configs - Gemfile, Gemfile.lock (vite_rails gem for bin/vite binstub) Excluded Rails backend: controllers, models, services, jobs, mailers, policies, db, lib, spec, public, node_modules. Update references to the new frontend location: - .gitignore: exclude frontend build artifacts (node_modules, tmp, packs), keep frontend/bin/ and frontend/vendor/ via negation - backend/scripts/parity_frontend_smoke.sh: CHATWOOT_DIR default reference/chatwoot -> ../frontend - backend/scripts/parity_frontend_browser_smoke.mjs: same default update - AGENTS.md: add frontend section with Rails/Vite coupling notes - README: architecture tree includes frontend/
52 lines
1.8 KiB
Ruby
52 lines
1.8 KiB
Ruby
require Rails.root.join('lib/redis/config')
|
|
|
|
schedule_file = 'config/schedule.yml'
|
|
|
|
Sidekiq.configure_client do |config|
|
|
config.redis = Redis::Config.app
|
|
end
|
|
|
|
# Logs whenever a job is pulled off Redis for execution.
|
|
class ChatwootDequeuedLogger
|
|
def call(_worker, job, queue)
|
|
payload = job['args'].first
|
|
Sidekiq.logger.info("Dequeued #{job['wrapped']} #{payload['job_id']} from #{queue}")
|
|
yield
|
|
end
|
|
end
|
|
|
|
Sidekiq.configure_server do |config|
|
|
config.redis = Redis::Config.app
|
|
|
|
if ActiveModel::Type::Boolean.new.cast(ENV.fetch('ENABLE_SIDEKIQ_DEQUEUE_LOGGER', false))
|
|
config.server_middleware do |chain|
|
|
chain.add ChatwootDequeuedLogger
|
|
end
|
|
end
|
|
|
|
# skip the default start stop logging
|
|
if Rails.env.production?
|
|
config.logger.formatter = Sidekiq::Logger::Formatters::JSON.new
|
|
config[:skip_default_job_logging] = true
|
|
config.logger.level = Logger.const_get(ENV.fetch('LOG_LEVEL', 'info').upcase.to_s)
|
|
end
|
|
end
|
|
|
|
# https://github.com/ondrejbartas/sidekiq-cron
|
|
Rails.application.reloader.to_prepare do
|
|
# load_from_hash! upserts jobs from the YAML and removes any Redis-persisted
|
|
# jobs that share the same source tag but are no longer in the file.
|
|
# This ensures deleted schedule entries are cleaned up on deploy.
|
|
if File.exist?(schedule_file) && Sidekiq.server?
|
|
schedule = YAML.load_file(schedule_file)
|
|
|
|
# Cron entries removed from schedule.yml but possibly still in Redis
|
|
# with source:'dynamic' (predating the source tag). load_from_hash!
|
|
# only cleans up source:'schedule' entries, so these need explicit removal.
|
|
# Remove names from this list once they've been through a deploy cycle.
|
|
%w[bulk_auto_assignment_job].each { |name| Sidekiq::Cron::Job.destroy(name) }
|
|
|
|
Sidekiq::Cron::Job.load_from_hash!(schedule, source: 'schedule')
|
|
end
|
|
end
|