Phish.in is an open source archive of live Phish audience recordings.
Ruby on Rails and Grape API wrap a PostgreSQL database on the backend. There's a web frontend written in React for browsing and playing audio content as well as a JSON API for accessing content programmatically.
All audio is provided in MP3 format. More formats and sources may be made available at a later time. Assets including audio MP3s, waveform PNGs, and album art JPEGs are served directly from the web server and cached via CloudFlare CDN.
Join the Discord to discuss content and development or install the Discord Bot to query setlists and play music in voice channels.
-
Install Docker
-
Clone the repo to your local machine
-
Create a
.envfile at the root of the repository -
Run
mise run services -
Download the Development SQL File and import it:
# Copy SQL dump into PG container and run it
$ docker cp /path/to/phishin-dev.sql phishin-pg-1:/docker-entrypoint-initdb.d/data.sql
$ docker exec -u postgres phishin-pg-1 createdb phishin_development
$ docker exec -u postgres phishin-pg-1 psql -d phishin_development -f docker-entrypoint-initdb.d/data.sql-
To present production content locally during development, set
PRODUCTION_CONTENT=truein your local.envfile. -
If you want to run the Postgres database in Docker and develop the app natively (recommended), you can spin it up like this:
Install mise for ruby version management (recommended):
$ brew install mise
$ mise installInstall dependencies:
$ brew install overmind # process manager (requires tmux)
$ gem install bundler
$ bundle install
$ yarn installRun the app:
$ mise run devIf you are on a Mac ARM and the ruby-audio gem fails to install, see the Troubleshooting section below.
Alternatively, if you prefer to develop completely in Docker, build and start the containers like this:
$ mise run upTo run the specs in Docker:
$ mise run specTo run the specs natively:
$ mise run services
$ bundle exec rails db:setup RAILS_ENV=test
$ bundle exec rspecThe content import process uses the Phish.net API for setlists. You must first obtain an API key from them and assign it to the environment variable PNET_API_KEY in .env.
If running the Rails app natively, you may need to install ffmpeg.
To import a new show or replace an existing one, name the MP3s according to the import format (I 01 Harry Hood.mp3) and place them in a folder named by date (2018-08-12). Place this folder in ./content/import and run the following command (mise run bash first if you use Docker):
bundle exec rails shows:importUse the interactive CLI to finish the import process then set PRODUCTION_CONTENT=false, restart the server, and visit http://localhost:3000/<date> to verify the import.
- If you get a
NoDatabaseErrororconnection to server at "localhost" failed, make sure:- No other Postgres server is running on your Mac (use
brew services list,ps aux | grep postgres, orlsof -i :5432). - Stop any native Postgres with
brew services stop postgresqlor by quitting Postgres.app. - After stopping, restart your Docker Postgres:
mise run services
- You should see your database with:
psql -h localhost -U postgres -l
- If you do not see
phishin_developmentin the list, re-import your SQL dump as described above.
- No other Postgres server is running on your Mac (use
- If you see an error like
EADDRINUSE: address already in use 127.0.0.1:3035, run:and kill any straylsof -i :3035
nodeprocesses:kill -9 <PID>
- If you are on a Mac ARM and the
ruby-audiogem fails to install, try the following:brew install libsndfile gem install ruby-audio -- --with-sndfile-dir=/opt/homebrew/opt/libsndfile
Forked with permission in 2012 from StreamPhish by Jeff Lang.
Software and content maintained by Justin Craig-Kuhn.
