-
Felix Eckhofer authoredFelix Eckhofer authored
C3Lingo rescheduled
Rapid assignment of shifts for chaos events
Overview
Technologies:
- Ruby on Rails with SQLite DB
- Tailwind CSS
- Turbo + Stimulus
- ActionCables with Redis backend
Dev environment
The project comes with a devcontainer for VSCode and compatible editors. Simply open the project folder in Code (or using devcontainer open <path>
) and after a few seconds, a suitable container should be ready.
Run bin/dev
in the integrated terminal to start the dev webserver and the tailwind watch job (see Procfile.dev
for details). Access your local rescheduled at http://127.0.0.1:3000.
Secrets
The application requires some secrets, as of writing these include:
filedrop_user
filedrop_password
heartbeat_deen
heartbeat_more
telegram_bot_token
You can supply the secrets by running rails credentials:edit
or pass them as environment variable in upper case (e.g. FILEDROP_USER
).
Preparation for an event
tbd.
- talks about seeds
- set "relevant stages"
relevant = ["Saal 1", "Saal ZIGZAG", "Saal GLITCH", "Stage HUFF", "Stage YELL", "Canceled talk"] conf=Conference.find_by(slug: "38c3") conf.relevant_stages=conf.stages.select { |val| relevant.include?(val[:name]) }
- sort stages
Stage.where(name: "Saal 1").update(weight: 10) Stage.where(name: "Saal GLITCH").update(weight: 20) Stage.where(name: "Saal ZIGZAG").update(weight: 30) Stage.where(name: "Stage HUFF").update(weight: 40) Stage.where(name: "Stage YELL").update(weight: 50)
In production
See rescheduled-deploy for a full docker-compose stack and more explanations.
Tips and Tricks
rails
tasks
Helpful By running bin/rails <command>
you can trigger some helpful actions, such as
-
rails c[onsole]
: Start interactive ruby shell -
rails db
: Start sqlite shell with the currently used DB -
rails db:migrate
: Run pending DB migrations, automatically done by docker image on start -
rails db:seed
(Re-)import DB seeds fromdb/seeds.rb
-
rails secret
generate a random secret, e.g. forsecret_key_base
-
rails generate
Powerful tool to generate boilerplate, run it to see list of options
rails console
In -
Manually trigger sync job
FetchConferenceDataJob.perform_now("38c3")
-
Reset user password
pw = SecureRandom.alphanumeric(12) u = User.find_by(name:"username_here") u.update(password: pw, password_confirmation: pw) u.save!
-
Send a test message to Telegram
TelegramGroupChatNotificationJob.perform_now(text: "der habicht sieht die gegenwart")
-
List all notes angels put in their candidacies:
Candidate.includes(:user, :session).where.not(note: [nil, ""]).pluck('sessions.title','users.name', :note)