yosis is a Ruby on Rails6 Web application to manage (online-) yoga courses and Free and Open Software, released under the AGPLv3+, copyright Felix Wolfsteller.
The main reason for this code to exist is https://online.yogamitveronique.de .
We are happy to support and/or host other platforms like that (but we cannot do that for free).
Project had extremely tight deadlines and is adapted to a single use and business case as of now. The interface is German (but i18n is fully prepared).
If you want that we host a page for you, need help with a deployment or some other features, send us a message.
- Site owner can upload videos assigned to courses and announce appointments.
- Users can register and upon mail confirmation enter a 7-day trial period.
- within the trial period, users can see the 3 last videos in each course and all appointment details.
- two days before end of trial period, users get informed via a mail that trial period (and thus access to videos and appointments) will end soon.
- Site owner can add subscriptions to users
- users with subscription can see all videos and all appointments
- five days before end of subscription, users get informed via a mail that subscription (and thus access to videos and appointments) will end soon.
- Users can contact site owner via a contact form.
- Site owner can modify certain elements of the page (mini-CMS).
- Hopefully responsive design everywhere.
- Scores 99 for desktop and 90 for mobile on googles PageSpeedInsights on our deployment!
Currently it is assumed that you run Ruby >= 2.6 <= 3 . Then, follow a typical rails development workflow:
# git clone / checkout / ...
bundle
rails db:setup
rails s # (development server)
Currently no example data is shipped, sorry.
You can try to import the testing-data with rails db:fixture:load
though.
This section cannot replace a proper tutorial, so not all details are covered, but yosis does not require anything special, as compared to a typical Ruby on Rails- application.
If you need support and have resources, feel free to get in contact with me. Otherwise follow e.g. herokus or phusion passengers documentation.
There is a Procfile
prepared for herokuish/dokku deployments, that will
automigrate the database after push. With it comes a CHECK
and the respective
rack route to /up
and a .buildpacks
file to allow for ffmpeg video previews
(an ActiveStorage feature).
The initial user can be set up like this (run in rails c
or rails run
):
User.create(email: 'adminsemail', password: 'adminspassword',
password_confirmation: 'adminspassword', confirmed_at: DateTime.current,
tos_agreement: true, read_privacy_terms: true,
role: 'admin')
To send mails and do other "background-task", you need to start delayed_job. Do
so with rake jobs:work
.
Note: While running bin/delayed_job run
(or start
) might also work, you will likely
see some errors in developement,
due to usage of Guard (I believe). A half-baked workaround might be to
create log/delayed_job.log
.
Recurring Jobs (like sending reminders about expiring trial periods and
subscriptions) will be created (if they do not yet exist) if you run
rails db:migrate
, rails db:schema:load
or rails db:schedule_jobs
(given the Procfile
here, if you have a deployment respecting
it, you should be safe, due to the defined release
processe).
To generate the sitemap, either run rails sitemap:refresh:no_ping
or use a
setup that respects the Procfile
(the sitemap will be generated in every
worker via bin/run.sh
).
To update/copy user-provided favicons either run rails yosis:copy_favicons
or
use a setup that respects the Procfile
(the favicons will be copied in every
worker via bin/run.sh
).
Set
DATABASEURL=postgres://user:pass@host:port/dbname
for production database usage ("herokuish").
To send mails you need to configure your mail credentials. Set following environment variables:
HOST=yourhost.comm
BINDING=yourhost.comm
MAILER_HOST=yourhost.commm # to generate absolute URLs in mails
SENDER_EMAIL="Neseri\ Your\ Community\ <[email protected]>"
SMTP_SERVER=smpt.yourhost.commm
SMTP_DOMAIN=yourhost.commm
SMTP_PORT=587
SMTP_PWD=9098asdjlker!
SMTP_USER=iaowur32oalks
RAILS_SERVE_STATIC_FILES=yes
Any account with administrator role can edit various SiteSettings from the admin menu (content, layout, title, ...).
So far, a git pull and rails db:migrate
worked. When you use heroku/dokku/git
push style deployments that respect the Procfile, everything should work out of
the box.
yosis is copyright 2020 Felix Wolfsteller and released under the AGPLv3+.
Some file use FSFEs reuse software compliant headers.
This repositories bundles third party assets:
- app/assets/fonts: The Font "Source Sans Pro" from Adobe (https://github.com/adobe-fonts/source-sans-pro), published under the OFL-1.1 . The "black" variant (weight 900) is omitted.
Contributions are more than welcome. For a pleasant experience, mail me or create issues before you dive deep.
Code is released under the AGPLv3+ (exceptions see below), Copyright 2020 Felix Wolfsteller. Copyright transfer of contributions is assumed (or get into contact).
There could be more.
Run tests with rails t
(you might have to sudo sysctl fs.inotify.max_user_watches=524288
if you hit filewatch limits with livereloard/guard/spring).
System tests have to be run manually with rails t test/system
.
During development, add new translation keys with
i18n-tasks add-missing
.
With [rack-livereload] and [guard-livereload] you can have your browser
refreshing itself when view files are changed. To do so, before starting your
development server (rails s
), fire up guard (guard
) in a separate shell.
Mails are sent asynchronously (via background-jobs), which means that in order
to the mails being sent you need to have a worker running (except in testing
environment). You can start job processing via delayed_job
with
rails jobs:work
.
Install mailcatcher (gem install mailcatcher
), start it and watch mails
arriving at http://127.0.0.1:1080 .
- Modify version in
config/application.rb
. - Modify CHANGELOG.md (https://github.com/olivierlacan/keep-a-changelog/)
- Tag the repositories state.
- Push.
- Design decisions and resources are found in the knowledgebase
- Some other infos about the tech stack are found in the knowledgebase, too.