何も考えずにサーバ側で
$ taps server postgres://dbuser:dbpassword@localhost/dbname httpuser httppassword
して、クライアント側で
$ taps pull sqlite://dump.sqlite3 http://httpuser:httppassword@192.168.33.10:5000
としたら、
Rack::Utils::OkJson::Error - cannot encode Symbol ...
というエラーが発生した。
調べたところ、Tapsのissueにて報告されていた問題だった。rack 1.0.1に依存していて、新しいrackバージョンでSinatraを動かすと発生する。
TapsのSinatraサーバ側で使うrackを1.0.1に指定すれば解決する。DBのデータを送受信するためだけにSinatraを動かすので公開するアプリケーションではない。よって古いバージョンでも問題ない。
サーバ側
まずサーバにsshで入る。今回はVagrantで試した。
$ ssh katryo@192.168.33.10
適当なディレクトリを作って、Gemfileを設置する。
$ mkdir for_taps_dump
$ cd for_taps_dump
$ bundle init
Gemfileが設置されるので編集する。
Gemfile
source "https://rubygems.org"
gem 'rack','1.0.1'
gem 'taps'
gem 'sqlite3'
gem 'pg'
古いrackをサーバにインストールする。
$ bundle
この古いrack(Ver 1.0.1)を使ってSinatraを動かせばいい。rackのバージョンを指定してtapsを動かすには以下のコマンドで大丈夫。
$ bundle exec taps server postgres://dbuser:dbpassword@localhost/dbname httpuser httppassword
クライアント側
クライアント側、つまり開発環境のほうではrackのバージョン指定は不要。
SQLite3のDBとして受け取りたいので、
$ taps pull sqlite://dump.sqlite3 http://httpuser:httppassword@192.168.33.10:5000
これでdumpをクライアント側に持ってこれる。