This repository has been archived on 2023-08-16. You can view files and clone it, but cannot push or open issues or pull requests.
Foodloop-Server/README.md

4.5 KiB
Raw Blame History

LocalSpend - Server

This repository contains the server for the LocalSpend system.

Current Status

Master: Build Status

Development: Build Status

Test Environment

Running Tests

To run the main test framework, first install all the dependencies, then run the tests:

  • cpanm --installdeps .
  • prove -lr

To run the main framework against a PostgreSQL backend, assuming you have postgres installed, you will need some extra dependencies first:

  • cpanm --installdeps . --with-feature postgres
  • PEAR_TEST_PG=1 prove -lr

Setting Up Minion

To set up Minion support, you will need to create a database and user for it to connect to. In production his should be a PostgreSQL database, however SQLite can be used in testing.

To use the SQLite version:

  1. Install the SQLite dependencies:
    • cpanm --installdeps --with-feature sqlite .
  2. Ensure that the following is in your configuration file:
    • minion => {
        SQLite => 'sqlite:minion.db',
      },
      

This will then use an SQLite DB for the Minion backend, using minion.db as the database file.

To start the minion itself, run this command:

  • ./script/pear-local_loop minion worker

Importing Ward Data

To import ward data:

  1. Download CSV(s) from here
  2. Run the following command:
    • ./script/pear-local_loop minion job \
        --enqueue 'csv_postcode_import'  \
        --args '[ "⟨ path to CSV ⟩ ]'
      

Setting Up Entity Postcodes

  1. Import Code-Point Open:
    • included in etc/
    • ./script/pear-local_loop codepoint_open --outcodes LA1
  2. Assign postcodes:
    • ./script/pear-local_loop minion job \
        --enqueue entity_postcode_lookup
      

Example PostgreSQL setup

# Example commands - probably not the best ones
# TODO come back and improve these with proper ownership and DDL rights
sudo -u postgres createuser minion
sudo -u postgres createdb localloop_minion
sudo -u postgres psql
psql=# alter user minion with encrypted password 'abc123';
psql=# grant all privileges on database localloop_minion to minion;

Development Environment

There are a couple of setup steps to getting a development environment ready.

First Time Setup

  1. Decide if you're using SQLite or PostgreSQL locally.
    • Development supports both, however production uses PostgreSQL.
    • For this example we will use SQLite.
    • As the default config. is set up for this, no configuration changes are needed initially.
  2. Install dependencies:
    • cpanm --installdeps . \
      --with-feature=sqlite \
      --with-feature=codepoint-open
      
  3. Install the database:
    • ./script/deploy_db install -c 'dbi:SQLite:dbname=foodloop.db'
  4. Set up the development users:
    • ./script/pear-local_loop dev_data --force
    • DO NOT RUN ON PROD.
  5. Start the minion:
    • ./script/pear-local_loop minion worker
  6. Import ward data (see instructions above)
  7. Set up postcodes (see instructions above)
  8. Create an environment.dev.ts file in src/environments with your API keys
  9. Start the application:
    • morbo script/pear-local_loop -l http://*:3000
    • You can modify the host and port as needed.

Database Scripts

To upgrade the database after making changes to commit:

  1. Increment the $VERSION number in lib/Pear/LocalLoop/Schema.pm
  2. ./script/deploy_db write_ddl -c 'dbi:SQLite:dbname=foodloop.db'
  3. ./script/deploy_db upgrade -c 'dbi:SQLite:dbname=foodloop.db'

To redo leaderboards:

  1. ./script/pear-local_loop recalc_leaderboards

Troubleshooting

Can't write to /usr/local/share/perl/5.30.0 and /usr/local/bin: Installing modules to /home//perl5 when running cpanm commands

Intall local::lib by running the following commands:

  cpanm --local-lib=~/perl5 local::lib && eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib)

NB: You must run this in each Terminal window; I don't know why.

Can't load application from file "/script/pear-local_loop": Can't locate Data/UUID.pm in @INC (you may need to install the DATA::UUID module) when running server

Ensure you have run the cpan --installdeps command.