Local development

The most common way to run a development version of the application is run with local dependencies.

Dependencies:

We recommend using RBenv to manage Ruby versions.

We recommend using nvm to manage NodeJS versions.

  1. Install PostgreSQL

    macOS:

     brew install postgresql
     brew services start postgresql
    

    Linux (Debian):

     sudo apt install -y postgresql postgresql-contrib libpq-dev
     sudo systemctl start postgresql
    
  2. Create a Postgres user

     sudo su - postgres -c "createuser <username> -s -P"
    
  3. Install RBenv and Ruby-build

    macOS:

     brew install rbenv
     rbenv init
     mkdir -p ~/.rbenv/plugins
     git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
    

    Linux (Debian):

     sudo apt install -y rbenv git
     rbenv init
     echo 'eval "$(rbenv init -)"' >> ~/.bashrc
     mkdir -p ~/.rbenv/plugins
     git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
    
  4. Install Ruby and Bundler

     rbenv install 3.1.4
     rbenv global 3.1.4
     source ~/.bashrc
     gem install bundler
    
  5. Install JavaScript dependencies

    Note that we currently use node v16, which is no longer the latest LTS version so you will need to specify the version number when installing

    macOS (using nvm):

    nvm install 16
    nvm use 16
    brew install yarn
    

    Linux (Debian):

     curl -sL https://deb.nodesource.com/setup_16.x | sudo bash -
     sudo apt -y install nodejs
     mkdir -p ~/.npm-packages
     npm config set prefix ~/.npm-packages
     echo 'NPM_PACKAGES="~/.npm-packages"' >> ~/.bashrc
     echo 'export PATH="$PATH:$NPM_PACKAGES/bin"' >> ~/.bashrc
     source ~/.bashrc
     npm install --location=global yarn
    
  6. Clone the repo

     git clone https://github.com/communitiesuk/submit-social-housing-lettings-and-sales-data.git
    

Application setup

  1. Copy the .env.example to .env and replace the database credentials with your local postgres user credentials.

  2. Install the dependencies:

     bundle install && yarn install
    
  3. Create the database & run migrations:

     bundle exec rake db:create db:migrate
    
  4. Seed the database if required:

     bundle exec rake db:seed
    
  5. Start the dev servers

    a. Using Foreman:

     ./bin/dev
    

    b. Individually:

    Rails:

     bundle exec rails s
    

    JavaScript (for hot reloading):

     yarn build --mode=development --watch
    

    If you’re not modifying front end assets you can bundle them as a one off task:

     yarn build --mode=development
    

    Development mode will target the latest versions of Chrome, Firefox and Safari for transpilation while production mode will target older browsers.

    The Rails server will start on http://localhost:3000.

  6. Install Gecko Driver

    Linux (Debian):

     wget https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-linux64.tar.gz
     tar -xvzf geckodriver-v0.31.0-linux64.tar.gz
     rm geckodriver-v0.31.0-linux64.tar.gz
     chmod +x geckodriver
     sudo mv geckodriver /usr/local/bin/
    

    Running the test suite (front end assets need to be built or server needs to be running):

     bundle exec rspec
    

    Note that these tests assume you have firefox installed.

Using Docker

  1. Build the image:

     docker-compose build
    
  2. Run the database migrations:

     docker-compose run --rm app /bin/bash -c 'rake db:migrate'
    
  3. Seed the database if required:

     docker-compose run --rm app /bin/bash -c 'rake db:seed'
    
  4. To be able to debug with Pry run the app using:

     docker-compose run --service-ports app
    

If this is not needed you can run docker-compose up as normal

The Rails server will start on http://localhost:8080.

  1. To run the test suite in docker:

     docker-compose run --rm app /bin/bash -c ' RAILS_ENV=test rspec'