Skip to content

m-dango/exercism-website

 
 

Repository files navigation

Exercism website

Build Status Maintainability Test Coverage

Development setup

This is a Ruby on Rails (5.2) application backed by MySQL. There are two ways to run it locally:

  1. Setup a local development environment with the steps below.
  2. Use a pre-made Docker setup. We don't maintain an official Docker repo, but you can try this version kindly maintained by @unused.

Things to install

  • Ruby: We recommend Ruby >=2.4 (and this will soon become a requirement). We recommend using RVM
  • MySQL: MySQL >=5.7 required. Install via your system's package manager or follow the official Installation instructions
  • Yarn: Yarn handles front-end dependencies. See Yarn's installation instructions.
  • Redis: Redis >=2.8 required. Sidekiq uses Redis to store all of its job and operational data. Installation instructions or checkout your OS's package manager.

Configure the database

Something like this will then get a working database setup:

mysql -e "CREATE USER 'exercism_reboot'@'localhost' IDENTIFIED BY 'exercism_reboot'" -u root -p
mysql -e "create database exercism_reboot_development" -u root -p
mysql -e "create database exercism_reboot_test" -u root -p
mysql -e "ALTER DATABASE exercism_reboot_development CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" -u root -p
mysql -e "ALTER DATABASE exercism_reboot_test CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" -u root -p
mysql -e "GRANT ALL PRIVILEGES ON exercism_reboot_development.* TO 'exercism_reboot'@'localhost'" -u root -p
mysql -e "GRANT ALL PRIVILEGES ON exercism_reboot_test.* TO 'exercism_reboot'@'localhost'" -u root -p

Install Bundler

Bundle is used to handle the project's Ruby dependencies. You can install it via

gem install bundler

Initial setup

Firstly, you need to set a server identity, which you can do like this:

echo "host" > server_identity

You also need to create a local version of secrets.yml:

cp config/secrets.yml.example config/secrets.yml

Then we've put a rake task together that should set everything else up. You can run it like this:

bundle install
bundle exec rake exercism:setup

Running a webserver

To run a webserver, simple run:

bundle exec rails s

Something like this will get a working webserver on http://lvh.me:3000 Note: Teams will be available on http://teams.lvh.me:3000

Notes

We recommend using lvh.me which is a DNS redirect to localhost, but which we honour cookies on.

OAuth setup

In order to login via OAuth on development, create a new OAuth application on GitHub.

Fill in the form with the following details:

The hostname and port would depend on your development setup.

Once created, paste in the GitHub key and secret into config/secrets.yml.

Extra scripts and useful notes

Linters

To ensure Exercism's accessibility, we've added a few tools. Before submitting a PR, please make sure to run bundle exec rubocop and bundle exec haml-lint.

Deleting an account

To delete a user, run user.destroy.

The user record is deleted, as well as associated objects except the ff:

  • Discussion posts where they are a mentor.
  • Maintainer records where their user record is associated.

Troubleshooting

MySQL < 5.7

The following error is seen using MySQL prior to version 5.7 as discussed at gogs/gogs#4894.

$ bundle exec rake exercism:setup
Mysql2::Error: Specified key was too long; max key length is 767 bytes:

If your system doesn't have a pre-built 5.7 package, this install log may be helpful.

Windows Subsystem For Linux

Installation on Windows Subsystem For Linux requires Windows Version 1809 (released in October 2018). Tracked at exercism/exercism#4346.

About

Exercism — Code practice and mentorship for everyone.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Ruby 62.6%
  • CSS 18.8%
  • HTML 17.7%
  • Other 0.9%