Giter Club home page Giter Club logo

calcentral's Introduction

ETS Junction

Looking for the CalCentral web application? That code is maintained by Student Information Systems at https://github.com/sis-berkeley-edu/calcentral.

  • Master Build: Build Status

Cartoon image of a maze of railroad tracks

Dependencies

Developer Setup

  1. Install Java 8 JDK (8u172): http://www.oracle.com/technetwork/java/javase/downloads/index.html

  2. Install Postgres:

    Note: To install Postgres, you must first install Homebrew.

    Install Homebrew with the following command:

    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

    Run the following command in Terminal after installation:

    brew --version

    Then run the following:

    brew update
    brew install postgresql
    1. For Mountain Lion & Mavericks users ONLY: Fix Postgres paths.

    2. For Mountain Lion & Mavericks users ONLY: If you can connect to Postgres via psql, but not via JDBC (you see "Connection refused" errors in the CalCentral app log), then edit /usr/local/var/postgres/pg_hba.conf and make sure you have these lines:

      host    all             all             127.0.0.1/32            md5
      host    all             all             samehost                md5
      
    3. For Mountain Lion & Mavericks users ONLY: Install XQuartz and make sure that /opt/X11/bin is on your PATH.

  3. Start Postgres, add users and create the necessary databases. (If your PostgreSQL server is managed externally, you'll probably need to create a schema that matches the database username. See CLC-893 for details.):

    pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
    psql postgres
    create database calcentral_development;
    create user calcentral_development with password 'secret' createdb;
    grant all privileges on database calcentral_development to calcentral_development;
    alter database calcentral_development owner to calcentral_development;
    create database calcentral;
    create user calcentral with password 'secret' createdb;
    grant all privileges on database calcentral to calcentral;
    alter database calcentral owner to calcentral;
    create database calcentral_test;
    create user calcentral_test with password 'secret' createdb;
    grant all privileges on database calcentral_test to calcentral_test;
    alter database calcentral_test owner to calcentral_test;
    create database edodb_test;
    grant all privileges on database edodb_test to calcentral_test;
    alter database edodb_test owner to calcentral_test;
    \q

    Note: At this point, exit out of Postgres. To do this, type "\q" and then press ENTER.

  4. Fork this repository, then:

    with ssh (note)

    git clone [email protected]:[your GitHub Account]/calcentral.git
    # e.g. git clone [email protected]:christianv/calcentral.git

    or via https - (note)

    git clone https://github.com/[your Github Account]/calcentral.git
    # e.g. git clone https://github.com/christianv/calcentral.git
    
  5. Go inside the calcentral repository:

    cd calcentral
    # Answer "yes" if it asks you to trust a new .rvmrc file.
  6. Install JRuby (see .ruby-version for required version):

    Note: To install JRuby, you must first install rvm.

    rvm get head
    rvm install jruby-[put-version-here]
    cd ..
    cd calcentral
    # Answer "yes" again if it asks you to trust a new .rvmrc file.
    rvm list
    # Make sure that everything looks fine
    # If it mentions "broken", you'll need to reinstall
  7. Make JRuby faster for local development by running this or put in your .bashrc:

    export JRUBY_OPTS="--dev"
  8. Configure Default JRuby and Gemset

    cd ~
    rvm use --default # This may output 'Unknown ruby string...', which can be ignored.
    rvm gemset use global
  9. Download and install xvfb. On a Mac, you get xvfb by installing XQuartz.

  10. Download the appropriate gems with Bundler:

    Important: Make sure you have the JRuby-upgraded CalCentral codebase in your calcentral directory before running bundle install.

    rvm rubygems 2.7.10 --force
    gem --version
    # Should output '2.7.10'
    
    gem uninstall bundler --force -x
    gem install bundler --version="1.17.3"
    bundle install
  11. Set up a local settings directory:

    mkdir ~/.calcentral_config

    Default settings are loaded from your source code in config/settings.yml and config/settings/ENVIRONMENT_NAME.yml. For example, the configuration used when running tests with RAILS_ENV=test is determined by the combination of config/settings/test.yml and config/settings.yml. Because we don't store passwords and other sensitive data in source code, any RAILS_ENV other than test requires overriding some default settings. Do this by creating ENVIRONMENT.local.yml files in your ~/.calcentral_config directory.

    development.local configs

    Your ~/.calcentral_config/development.local.yml file may include access tokens and URLs for a locally running Canvas server. You can also create Ruby configuration files like "settings.local.rb" and "development.local.rb" to amend the standard config/environments/*.rb files.

    Your development.local config must have:

    vue:
      localhost_base_url: 'http://localhost:8080'
  12. Install JDBC driver (for Oracle connection)

    • Download ojdbc7_g.jar
    • Note: You do not have to open the file.
    • Rename the file to ojdbc7.jar
    • Copy ojdbc7.jar to ~/.rvm/rubies/jruby-9.2.13.0/lib/
  13. Initialize PostgreSQL database tables:

    bundle exec rake environment db:schema:load db:seed
  14. Make yourself powerful:

    bundle exec rake superuser:create UID=[your numeric CalNet UID]
    # e.g. rake superuser:create UID=61889
  15. Install the front-end tools:

    brew install node
    npm install
    nvm use
  16. Start the front-end development server

    # starts development server
    npm run serve-vue

    Your browser will automatically load the Junction front-end on localhost:8080.

  17. Start the server:

    rails s

    Access Rails server at localhost:3000.

Back-end Testing

Back-end (rspec) tests live in spec/*.

To run the tests from the command line:

rspec

Front-end Linting

Front-end linting can be done by running the following commands:

npm run lint-vue

This will check for any potential JavaScript issues and whether you formatted the code correctly.

Debugging

Emulating production mode locally

  1. Make sure you have a separate production database:

    psql postgres
    create database calcentral_production;
    grant all privileges on database calcentral_production to calcentral_development;
  2. In calcentral_config/production.local.yml, you'll need the following entries:

    secret_token: 'Some random 30-char string'
    postgres: '...'
    application:
      serve_static_assets: true
  3. Populate the production db by invoking your production settings:

    RAILS_ENV="production" rake db:schema:load db:seed
  4. Precompile the front-end assets

    npm run build-vue
  5. Start the server in production mode:

    rails s -e production
  6. If you're not able to connect to Google or Canvas, export the data in the oauth2 from your development db and import them into the same table in your production db.

Test connection

Make sure you are on the Berkeley network or connected through preconfigured VPN for the Oracle connection. If you use a VPN, use group 1-Campus_VPN.

Enable basic authentication

Basic authentication will enable you to log in without using CAS. This is necessary when your application can't be CAS authenticated or when you're testing mobile browsers. Note: only enable this in fake mode or in development.

  1. Add the following setting to your environment.yml file (e.g. development.yml):

    developer_auth:
      enabled: true
      password: topsecret!
  2. (Re)start the server for the changes to take effect.

  3. Click on the footer (Berkeley logo) when you load the page.

  4. You should be seeing the Basic Auth screen. As the login you should use a UID (e.g. 61889 for oski) and then the password from the settings file.

"Act As" another user

To help another user debug an issue, you can "become" them on CalCentral. To assume the identity of another user, you must:

  • Currently be logged in as a designated superuser
  • Be accessing a machine/server which the other user has previously logged into (e.g. from localhost, you can't act as a random student, since that student has probably never logged in at your terminal)

Access the URL:

https://[hostname]/act_as?uid=123456

where 123456 is the UID of the user to emulate.

Note: The Act As feature will only reveal data from data sources we control, e.g. Canvas. Google data will be completely suppressed, EXCEPT for test users. The following user uids have been configured as test users.

To become yourself again, access:

https://[hostname]/stop_act_as

Logging

Logging behavior and destination can be controlled from the command line or shell scripts via env variables:

  • LOGGER_STDOUT=false - Only log to the default files
  • LOGGER_STDOUT=true - Log to standard output as well as the default files
  • LOGGER_STDOUT=only - Only log to standard output
  • LOGGER_LEVEL=DEBUG - Set logging level; acceptable values are 'FATAL', 'ERROR', 'WARN', 'INFO', and 'DEBUG'

Tips

  1. On Mac OS X, to get RubyMine to pick up the necessary environment variables, open a new shell, set the environment variables, and:

    /Applications/RubyMine.app/Contents/MacOS/rubymine &
  2. If you want to explore the Oracle database on Mac OS X, use SQL Developer.

Creating timeshifted fake data feeds

Proxies running in fake mode use WebMock to substitute fixture data for connections to external services (Canvas, Google, etc). This fake data lives in fixtures/json and fixtures/xml.

Fixture files can represent time information by tokens that are substituted with appropriately shifted values when fixture data is loaded. See config/initializers/timeshift.rb for the dictionary of substitutions.

Rake tasks:

To view other rake tasks for the project: rake -T

Installing Memcached:

Dev, QA, and Production CalCentral environments use memcached as a cache store in place of the default ActiveSupport cache store.

To set this up locally, perform the following steps:

  1. Install and run memcached.

  2. Add the following lines to development.local.yml:

cache:
  store: "memcached"

Memcached tasks:

A few rake tasks to help monitor statistics and more:

  • rake memcached:clear - Invalidate all memcached keys and reset memcached stats from all cluster nodes.

  • rake memcached:get_stats - Fetch memcached stats from all cluster nodes. Per-slab stats may point out specific types of data which are being overcached or undercached, or indicate a need to reconfigure memcached.

  • rake memcached:dump_slab slab=NUMBER - Shows which cached items are currently stored in the "slab" with the given ID. The list won't include the keys of expired or evicted items.

  • WARNING: do not run rake memcached:clear on the production cluster unless you know what you're doing!

  • All memcached tasks take the optional param of hosts. So, if say you weren't running these tasks on the cluster layers themselves, or only wanted to tinker with a certain subset of clusters: rake memcached:get_stats hosts="localhost:11212,localhost:11213,localhost:11214"

Using the feature toggle:

To selectively enable/disable a feature, add a property to the features section of settings.yml, e.g.:

features:
  wizbang: false
  neato: true

Keeping developer seed data updated

seeds.rb is intended for use only on developer machines, so they have a semi-realistic copy of production lists of superusers, links, etc. ./db/developer-seed-data.sql has the data used by rake db:seed. Occasionally we'll want to update it from production. To do that, log into a prod node and do:

pg_dump calcentral -O -x --inserts --clean -f developer-seed-data.sql -t oec_course_codes \
-h postgres-hostname -p postgres-port-number -U calcentral

Copy the file into your source tree and get it merged into master.

calcentral's People

Contributors

christianvuerings avatar redconfetti avatar johncrossman avatar pauline2k avatar yuhunglin avatar davidlimcheng avatar lyttam avatar pfarestveit avatar shacker avatar nkutub avatar raydavis avatar dfkaye avatar chikoon avatar haroonrasheed333 avatar delimmy avatar marcpechaitis avatar developish avatar elicochran avatar winstonkim avatar nolanchan avatar anair13 avatar tiffanyqi avatar wonjun avatar mdibyo avatar jonmhays avatar nicolaasmatthijs avatar sethlu avatar richcreationsrc avatar shuotong avatar sandeep-jay avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.