Search code examples
sinatrapuma

How to get Puma port inside Sinatra


I have some bash script start_dummy:

#!/usr/bin/env bash

#killall puma
ulimit -s 16384
ofile=logs/access_`date +%F_%H%M%S`.log
RACK_ENV=production puma -b tcp://0.0.0.0:22522 2>&1 | tee $ofile

and start_test:

#!/usr/bin/env bash

#killall puma
ulimit -s 16384
ofile=logs/access_`date +%F_%H%M%S`.log
RACK_ENV=production puma -b tcp://0.0.0.0:22577 2>&1 | tee $ofile

I want to connect different database when the app running on different port:

require 'sinatra'
# *snip* sinatra configuration

require 'data_mapper'
DataMapper::Model.raise_on_save_failure = true
if # __WHAT__ # when puma listen on 22577
  DataMapper.setup(:default, 'postgres://[email protected]/original')
else       # when puma listen on 22522
  DataMapper.setup(:default, 'postgres://[email protected]/dummy')
end 

what should I insert on __WHAT__ ?


Solution

  • if request.port == 22577
        DataMapper.setup(:default, 'postgres://[email protected]/original')
    else
        DataMapper.setup(:default, 'postgres://[email protected]/dummy')
    end
    

    A better way to do this would be to store the connection string in an environment variable that can be different per server:

    DataMapper.setup(:default, ENV['DATABASE_URL'])