Developer Setup
Introduction
For local development, engineers will need to walk through the basic setup steps to setup Vets API locally.
Vets API requires:
Ruby
3.2.2
PostgreSQL
11.x
(including PostGIS 2.5)Redis
5.0.x
The most up-to-date versions of each key dependency will be specified in the
docker-compose.yml
file and theDockerfile
.We suggest using a Ruby version manager such as
rbenv
,asdf
,rvm
, orchruby
to install and maintain your version of Ruby.
Base Setup
Follow the common base setup.
Install Bundler to manage dependencies
CODEgem install bundler
Follow the platform specific notes below for OSX or Ubuntu to get dependencies installed.
Install gem dependencies:
CODEcd vets-api; bundle install
More information about installing with Sidekiq Enterprise as well as our credentials are on the internal system here
Install overcommit
CODEovercommit --install --sign
Make sure you have the vets-api-mockdata repo locally installed, preferably in a sibling directory to
vets-api
.Go to the file
config/settings/development.yml
and make sure thecache-dir
points to the local installation ofvets-api-mockdata
from the previous step.CODEcache_dir: ../vets-api-mockdata # via rails; e.g. bundle exec rails s or bundle exec rails c # cache_dir: /cache # via docker; e.g. make up or make console
Add this key in
config/settings.local.yml
pointing to yourvets-api-mockdata
directory.CODE# settings.local.yml betamocks: cache_dir: ../vets-api-mockdata
Run
bin/setup
to setup the database and start the server.
pg_stat_statements
If you have trouble enabling query stats from the PgHero dashboard, try enabling it manually
Add the lines below to your main postgresql.conf file
On Mac it should be located somewhere similiar to the following:
~/Library/Application Support/Postgres/var-12/postgresql.conf
shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.track = all
pg_stat_statements.max = 10000
track_activity_query_size = 2048
Make sure to migrate your database to enable the pg_stat_statements extension
Settings and configuration
We use the config
gem to manage settings in the application. Local settings for each developer should be managed in your own local config/settings.local.yml
file, which by default can override the standard configuration and is excluded from source control so the settings can persist.
This file has the necessary configuration settings for local development as well as comments outlining some additional configuration that some developers may wish to use.
Configuring ClamAV antivirus
EKS
Prior to EKS, ClamAV (the virus scanner) was deployed in the same process as Vets API. With EKS, ClamAV has been extracted out into it’s own service. Locally you can see the docker-compose.yml config for clamav.
TODO: Running clamav natively, as we did in Vets API master still needs to be configured. For the time being, please run via docker:
Please set the clamav intitalizer initializers/clamav.rb file to the following:
# ## If running hybrid
if Rails.env.development?
ENV["CLAMD_TCP_HOST"] = "0.0.0.0"
ENV["CLAMD_TCP_PORT"] = "33100"
end
Options
Option 1: Run ONLY clamav via Docker
You can either run:docker-compose -f docker-compose-clamav.yml up
- this will run ONLY clamav via docker
After that, follow the native instructions and run foreman start -m all=1
Option 2: See hybrid setup
Option 3: Mock ClamAV
There is a third choice to "mock" a successful clamav response. If you choose this path, please set the clamav mock setting to true in the local settings.yml. This will mock the clamav response in the virus_scan code.
clamav:
mock: true
Platform Specific Notes
Specific notes for our most common native installation platforms are in this section. Note that most Windows users tend to use Docker instead of a native installation.
OSX
All of the OSX instructions assume homebrew
is your package manager
Install Redis
brew install redis
Install Postgresql & PostGIS
It is MUCH easier to use the Postgres.app which installs the correct combination of Postgresql and PostGIS versions.
Download the Postgres.app with PostgreSQL 10, 11 and 12
Install Instructions here: https://postgresapp.com/
sudo mkdir -p /etc/paths.d && echo /Applications/Postgres.app/Contents/Versions/latest/bin | sudo tee /etc/paths.d/postgresapp
ARCHFLAGS="-arch x86_64" gem install pg -v 1.2.3
Alternatively Postgresql 11 & PostGIS 2.5 can be installed with homebrew
brew install postgresql@11
brew services start postgresql@11
Install the
pex
manager to add your Postgresql 11 extensions from hereInstall the
postgis
extension along with a number of patches using the instructions summarized here:- CODE
PG_CPPFLAGS='-DACCEPT_USE_OF_DEPRECATED_PROJ_API_H -I/usr/local/include' CFLAGS='-DACCEPT_USE_OF_DEPRECATED_PROJ_API_H -I/usr/local/include' pex install postgis
Install ImageMagick
brew install imagemagick
Install Poppler
brew install poppler
Install ClamAV or use the fake scanner for development
CODEbrew install clamav # Take note of the the post-install instructions "To finish installation & run clamav you will need to edit the example conf files at `${conf_files_dir}`", which will be displayed as part of the installation process. Recent installations have been to `/usr/local/etc/clamav/` cd ${conf_files_dir} touch clamd.sock echo "LocalSocket ${conf_files_dir}" > clamd.conf echo "DatabaseMirror database.clamav.net" > freshclam.conf freshclam -v
NOTE: Run with
/usr/local/sbin/clamd -c /usr/local/etc/clamav/clamd.conf
and you will also have to override (temporarily) theconfig/clamd.conf
file with-LocalSocket /usr/local/etc/clamav/clamd.sock
Install pdftk
brew install pdftk-java
continue with Base setup
Alternative (Ubuntu 20.04 LTS)
Install Postgres and enable on startup
CODEwget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - echo "deb http://apt.postgresql.org/pub/repos/apt/ focal"-pgdg main | sudo tee /etc/apt/sources.list.d/pgdg.list sudo apt update sudo apt install postgresql-11 sudo systemctl start postgresql sudo -i -u postgres createuser --superuser YOURNAME exit
Install PostGIS
CODEsudo apt install -y postgresql-14-postgis-3 sudo -i -u postgres createuser postgis_test createdb postgis_db -O postgis_test psql -d postgis_db CREATE EXTENSION postgis; SELECT PostGIS_version(); \q
Install Redis
CODEsudo apt install -y redis-server sudo sed -i 's/^supervised no/supervised systemd/' /etc/redis/redis.conf sudo systemctl restart redis.service sudo systemctl status redis # ctrl+c to exit
Install ImageMagick
sudo apt install -y imagemagick
Install Poppler
sudo apt install -y poppler-utils
Install ClamAV
sudo apt install -y clamav
Install pdftk
sudo apt install -y pdftk
continue with Base setup
Help and feedback
Get help from the Platform Support Team in Slack.
Submit a feature idea to the Platform.