LoginSignup
1
1

More than 5 years have passed since last update.

TapsでdumpとってこようとしたときRack::Utils::OkJson::Error - cannot encode Symbolというエラー出たときのメモ

Last updated at Posted at 2013-10-13

何も考えずにサーバ側で

$ 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をクライアント側に持ってこれる。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1