|
|
3 years ago | |
|---|---|---|
| .github/workflows | 3 years ago | |
| app | 3 years ago | |
| bin | 4 years ago | |
| config | 3 years ago | |
| data | 3 years ago | |
| db | 3 years ago | |
| doc | 3 years ago | |
| lib | 3 years ago | |
| log | 9 years ago | |
| public | 4 years ago | |
| scripts | 3 years ago | |
| spec | 3 years ago | |
| tmp | 9 years ago | |
| vendor/assets | 9 years ago | |
| .editorconfig | 4 years ago | |
| .erb-lint.yml | 3 years ago | |
| .gitignore | 4 years ago | |
| .prettierrc | 4 years ago | |
| .prettierrc.json | 3 years ago | |
| .reek.yml | 3 years ago | |
| .rspec | 4 years ago | |
| .rubocop.yml | 3 years ago | |
| .ruby-version | 3 years ago | |
| .solargraph.yml | 3 years ago | |
| CHANGELOG.md | 3 years ago | |
| Gemfile | 3 years ago | |
| Gemfile.lock | 3 years ago | |
| LICENSE | 3 years ago | |
| Procfile | 4 years ago | |
| Procfile.dev | 4 years ago | |
| README.md | 3 years ago | |
| Rakefile | 4 years ago | |
| babel.config.js | 4 years ago | |
| config.ru | 9 years ago | |
| package.json | 3 years ago | |
| yarn-error.log | 3 years ago | |
| yarn.lock | 3 years ago | |
README.md
edcontext
This project contains three pieces:
- A webapp for visualizing and understanding MCIEA survey data
- Tasks for processing and indexing raw survey data
- Experimental work to conduct survey samples via text message
This is a Rails project, deployed on Heroku.
Site links
Live app: https://mciea-dashboard.herokuapp.com/ Live dashboard: http://mciea-dashboard.herokuapp.com/districts/winchester/schools/winchester-high-school/dashboard?year=2020-21
Local development
Install Postgres and running first.
(MacOS, Optional), you can use Homebrew:
brew install postgres
brew services start postgresql
Linux:
Install postgres. Known working version is version 13
https://www.postgresql.org/download/
On linux, if you run into problems creating the postgres database, edit /etc/postgresql/13/main/pg_hba.conf. Change the connection method of IPv4 and IPv6 connections from md5 to trust.
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
Once postgres is installed and running, install the required gems and then migrate the database.
bundle install
bundle exec rake db:create db:schema:load db:seed
Or if you only want to seed Lowell schools
bundle install
bundle exec rake db:create db:schema:load
bundle exec rake data:seed_only_lowell
Install the javascript dependencies
yarn install
At this point you can run the app and login. There won't be any data yet though; keep reading!
The seed file populates the following tables
| Name | Description |
|---|---|
| School | School ids are only unique to their district. More than one school has an id of 1 |
| District | Districts and schools have attached slugs. We find search for these models by their slugs |
| SqmCategory | The legacy name here is Category. It still exits in the database. We wanted the freedom to make changes and still preserve the legacy site until the end of the engagement. |
| Measure | In the bar graph measures represent a single bar |
| SurveyItem | This table has an attribute prompt that is the question asked |
SurveyItemResponses does not get populated at this stage.
Database
Postgres
Gems
| Name | Description |
|---|---|
| puma | webserver |
| pg | postgres |
| jquery-rails | legacy, allows use of jquery |
| jbuilder | legacy, build json objects |
| haml | legacy, write views in haml syntax |
| bootstrap | css framework |
| newrelic_rpm | legacy?, application monitoring |
| devise | authentication |
| omniauth | authentication |
| twilio-ruby | legacy, text messaging |
| activerecord-import | faster database imports |
| stimulus | Create javascript controllers |
| turbo-rails | Manages what gets rendered on the frontend and when |
| redis | Caching system |
| jsbundling-rails | Bundle javascript asssets |
| cssbundling-rails | Bundle css assets |
External APIs
None yet. Hoping to integrate with Powerschool and Aspen for school administrative data.
Javascript
Esbuild is used as the javascript bundler. Scripts for esbuild are defined in package.json e.g. yarn build. This script will run if in development with bin/dev.
The javascript testing library is jest. Manually run test with yarn test. Javascript tests will also run with bundle exec rake.
Stimulus is installed. Create a stimulus controller with ./bin/rails generate stimulus [controller]. If you create a stimulus controller manually, you can add it to index.js with the command stimulus:manifest:update.
css
Bootstrap 5
Loading Data
Loading Survey Item Responses
SurveyItemResponses is the most important table to understand. SurveyItemResponses is the data that will change year to year and makes up the majority of the database records. Roughly 500,000 SurveyItemResponses per year.
Some notes:
- The data loading task assumes that the CSV files live in the
#{RAILS_ROOT}/data/survey_responsesdirectory - The data loading task is idempotent, i.e. it can be run multiple times without duplicating previously-ingested data
How to run the data loading task:
# locally
$ bundle exec rake data:load_survey_responses
# on heroku staging environment
$ heroku run:detached -a mciea-beta bundle exec rake data:load_survey_responses
# on heroku production environment
$ heroku run:detached -a mciea-dashboard bundle exec rake data:load_survey_responses
Or if you only want to load data for Lowell
# locally
$ bundle exec rake data:load_survey_responses_for_lowell
For convenience, you can use the following script for loading data on Heroku:
# on heroku staging environment
$ ./scripts/load_survey_responses_on_heroku beta
# on heroku production environment
$ ./scripts/load_survey_responses_on_heroku dashboard
There is also an example one-off task to load a single csv at a time.
bundle exec rake one_off:load_2018_19_student_responses
Loading Admin Data Values
Loading admin data is similar to loading survey item responses. Run the one of the following scripts to load admin data to a selected environment.
# locally
$ bundle exec rake data:load_admin_data
# on heroku staging environment
$ heroku run:detached -a mciea-beta bundle exec rake data:load_admin_data
# on heroku production environment
$ heroku run:detached -a mciea-dashboard bundle exec rake data:load_admin_data
Load Response Rates
Many parts of the site rely on the response rate table being populated. The response rate is taken into account when determining if there is sufficient data to show
# locally
$ bundle exec rake data:reset_response_rates
# on heroku staging environment
$ heroku run:detached -a mciea-beta bundle exec rake data:reset_response_rates
# on heroku production environment
$ heroku run:detached -a mciea-dashboard bundle exec rake data:reset_response_rates
Load Student demographic information
Student demographic information is needed for the Analyze page disagregation
# locally
$ bundle exec rake data:load_students
# on heroku staging environment
$ heroku run:detached -a mciea-beta bundle exec rake data:load_students
# on heroku production environment
$ heroku run:detached -a mciea-dashboard bundle exec rake data:load_students
Or if you only want to load students for Lowell schools
# locally
$ bundle exec rake data:load_students_for_lowell
Load scores for each race
For performance, the scores for an individual race must be precalculated. Make sure to load response rates, and student demographic information before recaculating scores by race
# locally
$ bundle exec rake data:reset_race_scores
# on heroku staging environment
$ heroku run:detached -a mciea-beta bundle exec rake data:reset_race_scores
# on heroku production environment
$ heroku run:detached -a mciea-dashboard bundle exec rake data:reset_race_scores
Running tests
Single threaded test execution
Prepare the test database.
bundle exec rake db:test:prepare
If you need to look at the rails console for the test environment
RAILS_ENV=test rails c
Run the tests
bundle exec rake
Parallel test execution
The parallel tests gem is installed. It's optional to use.
Set the TEST_ENV_NUMBER environment variable. For example, add this line to your .bashrc
export TEST_ENV_NUMBER="20"
Create the additional databases
bundle exec rake parallel:create
Run the tests in parallel
bundle exec rake parallel:spec
Run the tests with a specific number of processes
bundle exec rake parallel:spec[5]
Viewing test coverage
xdg-open coverage/index.html
Javascript tests
Run the javascript tests
yarn test
Connecting to Heroku git
To add the heroku remote repository for beta run
git remote add beta https://git.heroku.com/mciea-beta.git
To add the heroku remote repository for production run
git remote add dashboard https://git.heroku.com/mciea-dashboard.git
Continuous Integration
Pushing commits to the main branch triggers auto-deployment to the staging environment. Use the ship-it script from the main branch when you're ready to deploy to staging
scripts/ship-it.sh
Deployments to production must be done through the Heroku web interface or via the Heroku command line
Running the development server
Start esbuild for dynamic compilation of javascript assets.
yarn build --watch
Start the puma web server
bin/rails s