Giter Club home page Giter Club logo

taps's Introduction

Taps – simple database import/export app

A simple database agnostic import/export app to transfer data to/from a remote database.

Usage: Server

Here’s how you start a taps server

$ taps server postgres://localdbuser:localdbpass@localhost/dbname httpuser httppassword

You can also specify an encoding in the database url

$ taps server mysql://localdbuser:localdbpass@localhost/dbname?encoding=latin1 httpuser httppassword

Usage: Client

When you want to pull down a database from a taps server

$ taps pull postgres://dbuser:dbpassword@localhost/dbname http://httpuser:[email protected]:5000

or when you want to push a local database to a taps server

$ taps push postgres://dbuser:dbpassword@localhost/dbname http://httpuser:[email protected]:5000

or when you want to transfer a list of tables

$ taps push postgres://dbuser:dbpassword@localhost/dbname http://httpuser:[email protected]:5000 --tables logs,tags

or when you want to transfer tables that start with a word

$ taps push postgres://dbuser:dbpassword@localhost/dbname http://httpuser:[email protected]:5000 --filter '^log_'

Known Issues

  • Foreign key constraints get lost in the schema transfer

  • Tables without primary keys will be incredibly slow to transfer. This is due to it being inefficient having large offset values in queries.

  • Multiple schemas are currently not supported

Meta

Maintained by Ricardo Chimal, Jr. (ricardo at heroku dot com)

Written by Ricardo Chimal, Jr. (ricardo at heroku dot com) and Adam Wiggins (adam at heroku dot com)

Early research and inspiration by Blake Mizerany

Released under the MIT License: www.opensource.org/licenses/mit-license.php

github.com/ricardochimal/taps

Special Thanks to Sequel for making this tool possible sequel.rubyforge.org/

taps's People

Contributors

bmizerany avatar ddollar avatar empact avatar eric1234 avatar erithmetic avatar gorsuch avatar kmayer avatar ricardochimal avatar rtomayko avatar simonmichael avatar technomancy avatar walski avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

taps's Issues

unable to open database file (Sequel::DatabaseConnectionError)

$ heroku db:push
Loaded Taps v0.3.11
Auto-detected local database: sqlite://db/development.sqlite3
Warning: Data in the app 'afternoon-autumn-56' will be overwritten and will not be recoverable.
Are you sure you wish to continue? (y/n)? y
Sending schema
c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/adapters/sqlite.rb:36:in initialize': SQLite3::CantOpenExceptio n: unable to open database file (Sequel::DatabaseConnectionError) from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/adapters/sqlite.rb:36:innew'
from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/adapters/sqlite.rb:36:in connect' from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/database/misc.rb:44 from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/connection_pool.rb:92:incall'
from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/connection_pool.rb:92:in make_new' from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/connection_pool/threaded.rb:126:inmake_new'
from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/connection_pool/threaded.rb:112:in available' from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/connection_pool/threaded.rb:102:inacquire'
from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/connection_pool/threaded.rb:146:in sync' from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/connection_pool/threaded.rb:146:insynchronize'
from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/connection_pool/threaded.rb:146:in sync' from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/connection_pool/threaded.rb:101:inacquire'
from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/connection_pool/threaded.rb:74:in hold' from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/database/connecting.rb:189:insynchronize'
from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/adapters/sqlite.rb:115:in _execute' from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/adapters/sqlite.rb:80:inexecute'
from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/dataset/actions.rb:392:in execute' from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/adapters/sqlite.rb:272:infetch_rows'
from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/dataset/actions.rb:101:in each' from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/dataset/actions.rb:248:inmap'
from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/dataset/actions.rb:248:in map' from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/adapters/shared/sqlite.rb:249:inparse_pragma'
from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/adapters/shared/sqlite.rb:270:in schema_parse_tabl e' from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/database/query.rb:129:inschema'
from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/extensions/schema_dumper.rb:57:in dump_table_schem a' from c:/ruby/lib/ruby/gems/1.8/gems/taps-0.3.11/bin/../lib/taps/schema.rb:22:indump_table'
from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/database/connecting.rb:73:in connect' from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/core.rb:111:inconnect'
from c:/ruby/lib/ruby/gems/1.8/gems/taps-0.3.11/bin/../lib/taps/schema.rb:18:in dump_table' from c:/ruby/lib/ruby/gems/1.8/gems/taps-0.3.11/bin/schema:32 Schema: 100% |==========================================| Time: 00:00:03 c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/adapters/sqlite.rb:36:ininitialize': SQLite3::CantOpenExceptio
n: unable to open database file (Sequel::DatabaseConnectionError)
from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/adapters/sqlite.rb:36:in new' from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/adapters/sqlite.rb:36:inconnect'
from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/database/misc.rb:44
from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/connection_pool.rb:92:in call' from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/connection_pool.rb:92:inmake_new'
from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/connection_pool/threaded.rb:126:in make_new' from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/connection_pool/threaded.rb:112:inavailable'
from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/connection_pool/threaded.rb:102:in acquire' from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/connection_pool/threaded.rb:146:insync'
from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/connection_pool/threaded.rb:146:in synchronize' from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/connection_pool/threaded.rb:146:insync'
from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/connection_pool/threaded.rb:101:in acquire' from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/connection_pool/threaded.rb:74:inhold'
from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/database/connecting.rb:189:in synchronize' from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/adapters/sqlite.rb:115:in_execute'
from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/adapters/sqlite.rb:80:in execute' from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/dataset/actions.rb:392:inexecute'
from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/adapters/sqlite.rb:272:in fetch_rows' from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/dataset/actions.rb:101:ineach'
from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/dataset/actions.rb:248:in map' from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/dataset/actions.rb:248:inmap'
from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/adapters/shared/sqlite.rb:122:in tables' from c:/ruby/lib/ruby/gems/1.8/gems/taps-0.3.11/bin/../lib/taps/schema.rb:41:inindexes_individual'
from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/database/connecting.rb:73:in connect' from c:/ruby/lib/ruby/gems/1.8/gems/sequel-3.13.0/lib/sequel/core.rb:111:inconnect'
from c:/ruby/lib/ruby/gems/1.8/gems/taps-0.3.11/bin/../lib/taps/schema.rb:40:in indexes_individual' from c:/ruby/lib/ruby/gems/1.8/gems/taps-0.3.11/bin/schema:36 c:/ruby/lib/ruby/gems/1.8/gems/json_pure-1.4.3/lib/json/pure/parser.rb:146:inparse': source did not contain any JSON!
(JSON::ParserError)
from c:/ruby/lib/ruby/gems/1.8/gems/json_pure-1.4.3/lib/json/common.rb:146:in parse' from c:/ruby/lib/ruby/gems/1.8/gems/taps-0.3.11/lib/taps/operation.rb:410:inpush_indexes'
from c:/ruby/lib/ruby/gems/1.8/gems/taps-0.3.11/lib/taps/operation.rb:388:in run' from c:/ruby/lib/ruby/gems/1.8/gems/taps-0.3.11/lib/taps/cli.rb:164:inclientxfer'
from c:/ruby/lib/ruby/gems/1.8/gems/heroku-1.9.13/lib/heroku/commands/db.rb:156:in taps_client' from c:/ruby/lib/ruby/gems/1.8/gems/heroku-1.9.13/lib/heroku/commands/db.rb:13:inpush'
from c:/ruby/lib/ruby/gems/1.8/gems/heroku-1.9.13/lib/heroku/command.rb:48:in send' from c:/ruby/lib/ruby/gems/1.8/gems/heroku-1.9.13/lib/heroku/command.rb:48:inrun_internal'
from c:/ruby/lib/ruby/gems/1.8/gems/heroku-1.9.13/lib/heroku/command.rb:20:in run' from c:/ruby/lib/ruby/gems/1.8/gems/heroku-1.9.13/bin/heroku:13 from c:/ruby/bin/heroku:19:inload'
from c:/ruby/bin/heroku:19

Error encountered loading data (Ruby 1.9)

Originally reported by bmaland on the heroku client issues:

During heroku db:pull, I get the following error on my Ruby 1.9 system:

Error encountered loading data, wrote the data chunk to dump.10718.gz              | ETA:  --:--:--
/usr/local/lib/ruby/gems/1.9.1/gems/taps-0.2.18/lib/taps/client_session.rb:232:in `load': class Date needs to have method `_load' (TypeError)

It does work fine with Ruby 1.8.6 so it's probably some compatibility issue.

MySQL server has gone away

I'm trying to use taps to move a database from a local mysql instance running on an Amazon EC2 instance to an RDS instance. The DB is of medium size, about 850MB with 40,000 records in the biggest table.

Unfortunately, the system is routinely failing at the start of attempting to import this biggest table. Below is the stack trace. I imagine it's something to do with memory size? Is there some parameter I need to configure? I'm running the smallest Amazon instances for both the host and the RDS node, about 1.7GB of RAM. As we are still in dev mode there's nothing much else using memory, disk, network, etc.

The node hosting the taps server is running Mysql 5.1.37 and the destination is 5.1.45-log

Thanks

Receiving schema
Schema:        100%     |=============================================================================================================================================================| Time: 00:00:08
Receiving data
10 tables, 90,309 records
actions:       100%     |=============================================================================================================================================================| Time: 00:00:00
/var/lib/gems/1.8/gems/sequel-3.10.0/lib/sequel/database.rb:822:in `query': MySQL server has gone away (Mysql::Error)                                                             | ETA:  --:--:--
from /var/lib/gems/1.8/gems/sequel-3.10.0/lib/sequel/database.rb:822:in `send'
from /var/lib/gems/1.8/gems/sequel-3.10.0/lib/sequel/database.rb:822:in `log_connection_execute'
from /var/lib/gems/1.8/gems/sequel-3.10.0/lib/sequel/database.rb:890:in `rollback_transaction'
from /var/lib/gems/1.8/gems/sequel-3.10.0/lib/sequel/database.rb:631:in `_transaction'
from /var/lib/gems/1.8/gems/sequel-3.10.0/lib/sequel/database.rb:575:in `transaction'
from /var/lib/gems/1.8/gems/sequel-3.10.0/lib/sequel/connection_pool/threaded.rb:84:in `hold'
from /var/lib/gems/1.8/gems/sequel-3.10.0/lib/sequel/database.rb:535:in `synchronize'
from /var/lib/gems/1.8/gems/sequel-3.10.0/lib/sequel/database.rb:573:in `transaction'
from /var/lib/gems/1.8/gems/sequel-3.10.0/lib/sequel/dataset/convenience.rb:129:in `import'
from /var/lib/gems/1.8/gems/taps-0.3.6/bin/../lib/taps/data_stream.rb:284:in `import_rows'
from /var/lib/gems/1.8/gems/taps-0.3.6/bin/../lib/taps/data_stream.rb:133:in `fetch_remote'
from /var/lib/gems/1.8/gems/taps-0.3.6/bin/../lib/taps/operation.rb:286:in `pull_data_from_table'
from /var/lib/gems/1.8/gems/taps-0.3.6/bin/../lib/taps/operation.rb:279:in `loop'
from /var/lib/gems/1.8/gems/taps-0.3.6/bin/../lib/taps/operation.rb:279:in `pull_data_from_table'
from /var/lib/gems/1.8/gems/taps-0.3.6/bin/../lib/taps/operation.rb:262:in `pull_data'
from /var/lib/gems/1.8/gems/taps-0.3.6/bin/../lib/taps/operation.rb:256:in `each'
from /var/lib/gems/1.8/gems/taps-0.3.6/bin/../lib/taps/operation.rb:256:in `pull_data'
from /var/lib/gems/1.8/gems/taps-0.3.6/bin/../lib/taps/operation.rb:221:in `run'
from /var/lib/gems/1.8/gems/taps-0.3.6/bin/../lib/taps/cli.rb:164:in `clientxfer'
from /var/lib/gems/1.8/gems/taps-0.3.6/bin/../lib/taps/cli.rb:33:in `pull'
from /var/lib/gems/1.8/gems/taps-0.3.6/bin/../lib/taps/cli.rb:21:in `send'
from /var/lib/gems/1.8/gems/taps-0.3.6/bin/../lib/taps/cli.rb:21:in `run'
from /var/lib/gems/1.8/gems/taps-0.3.6/bin/taps:6
from /sbin/taps:19:in `load'
from /sbin/taps:19`

Pushing a db with a table with a Date field

Ruby: 1.9.2dev
Rails: 3.0 beta3
Taps: 0.3.4

I have an app using a sqlite3 db with a Users table with a 'birthday' field of type 'date'. When I try to push the db with 'heroku db:push', the push proceeds until it stops at uploading the users table, and I get the following error:

Taps Server Error: instance of Date needs to have method `marshal_load'

At the time of the error, the db had only one user (Testy McGee, who didn't have a birthday entered in the db). After I removed the 'birthday' field with a migration, the error went away.

Obviously the users.table has the usual timestamp fields, which are of type 'datetime'. There does not appear to be an issue with the 'datetime' fields.

The migration I used to add the 'date' field was as follows:
class AddBirthdayToUsers < ActiveRecord::Migration
def self.up
add_column :users, :birthday, :date
end
def self.down
remove_column :users, :birthday
end
end

Wonder if the fault is on my end. Appreciate the help.

translator.rb:94: undefined method `strip' for 0:Fixnum

Hi,

I noticed this when trying to push my development database (sqlite3) to Heroku.

The error happens for field of type boolean and containing the value 1 or 0. I fixed the issue temporarily by adding the following to line 94: "v == 0 || v == 1"

I am new to Taps, Heroku and Sqlite so I can't really tell if this is a good solution.

got RestClient::RequestFailed: HTTP status code 502 when pushing large data

Hi there,

I was doing heroku db:push --tables sometables on a 2 gigabyte table.
It went on to work for about a couple hours, and then it failed, with a caught server exception 502.

I tried to do a resume, but it gave me RestClient::RequestFailed: HTTP status code 502
Finally I tried to just re ran that first command heroku db:push --tables sometables
and it gave me the same error: RestClient::RequestFailed: HTTP status code 502

Thanks,

Parama

Time out of range

While importing database in the beginning everything is ok, but in the moment I see error

Error encountered loading data, wrote the data chunk to dump.4096.dat | ETA: --:--:--
/usr/lib/ruby/gems/1.8/gems/taps-0.3.4/lib/taps/data_stream.rb:183:in `_load': time out of range (ArgumentError)

When I try to start taps server with --port option, I get "`server' was called incorrectly. Call as `server'"

> taps server a b c --port 5001
`server' was called incorrectly. Call as `server'

It works fine without the --port option.

What am I doing wrong?

And when I move the code from cli.rb to a cli.thor file to test it, it works fine there too:

module Taps
class Cli < Thor
    desc "server   ", "Start a taps database import/export server"
    method_options(:port => :numeric)
    def server(database_url, login, password)
          p options
    end
end
end
thor taps:cli:server a b c --port 3
{"port"=>3}
> which taps
/var/lib/gems/1.9.1/bin/taps

> ruby --version
ruby 1.9.1p243 (2009-07-16 revision 24175) [x86_64-linux]

> gem list thor
thor (0.11.5, 0.9.9)
> gem list taps
taps (0.2.23)

invalid byte sequence for encoding "UTF8"

iam trying tu push export a table to a heroku app, both databases are on utf8 but iam still getting the invalid byte sequence error. I have tried to make encoding explicit with heroku db:push mysql://username:passw...@localhost/db_name?encoding=utf8 but it still doesnt work.

The error is thrown on a record with accents. The string is "Partido Acción Nacional"

!!! Caught Server Exception
HTTP CODE: 500
Taps Server Error: PGError: ERROR: invalid byte sequence for encoding "UTF8": 0xf36e204e
HINT: This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding".

Rails 3 + Heroku push = Sequel cannot connect

Hi,
I have taps (0.3.13) & sequel (3.15.0) & mysql2 (0.2.4) in with a Rails3 app in linux. I try and do "heroku db:push" and get the error message:

Failed to connect to database:
  Sequel::AdapterNotFound -> LoadError: no such file to load -- mysql2

I do have mysql2 - project works great locally. Any ideas what to try?

[warning] The response contained in an RestClient::Exception is now a RestClient::Response

Looks like there was a change in the RestClient exception API.

This is what I get when I heroku db:push (heroku 1.7.1, taps 0.2.24, rest-client 1.3.1):
[warning] The response contained in an RestClient::Exception is now a RestClient::Response instead of a Net::HTTPResponse, please update your code
Taps Server Error: instance of Date needs to have method `marshal_load'

Table already exists

Not sure if this is intentional, but I'm getting a 'table already exists' if I try to pull and overwrite my local db.

/Library/Ruby/Gems/1.8/gems/sequel-3.10.0/lib/sequel/adapters/mysql.rb:157:in `query': Mysql::Error: Table 'projects' already exists (Sequel::DatabaseError)

Where do I get the C-based adadpter?

heroku db:pull mysql://root:r00t@localhost/busbingo
Loaded Taps v0.3.11
Warning: Data in the database 'mysql://root:r00t@localhost/busbingo' will be overwritten and will not be recoverable.
Are you sure you wish to continue? (y/n)? y
Failed to connect to database:
Sequel::AdapterNotFound -> LoadError: require 'mysql' did not define Mysql::CLIENT_MULTI_RESULTS!
You are probably using the pure ruby mysql.rb driver,
which Sequel does not support. You need to install
the C based adapter, and make sure that the mysql.so
file is loaded instead of the mysql.rb file.

Where do I get the C-based adapter. What is it called?

Need ability to specify an Oracle schema

Connecting to an Oracle database uses the logged in user's default schema. We need the ability to specify a different schema.

The Sequel gem has a :default_schema option while connecting, but I was unable to get it to work. I was able to do something like this:
db = Sequel.connect("oracle://user:password@server/instance") # this will connect to user's default schema
db.run("ALTER SESSION SET current_schema=ABC") # we are now using the ABC schema

Another option would be to prefix all of the tables with the schema:
db["SELECT * FROM ABC.employees"]

I'd be willing to submit a patch given the right direction on how to integrate this into taps.

Installing rack 1.0.0 breaks everything

Installing rack 1.0.0 breaks current sinatra (0.9.1.1). To fix it I installed sinatra-sinatra gem (which is basically sinatra 0.9.1.3).
Latest sinatra breaks taps 0.2.16 (it depends on 'sinatra', '~> 0.9.0'). So, things get pretty complicated.

Mishandles $ in username or password

When pushing/pulling an exception is thrown as taps tries to access the database with a truncated username, ending where $ is found. This happens even when the $ is escaped on the command line, or stored in an environment variable. This is the top of the stack trace for the error, with a username of WebU$er

/usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/mysql_adapter.rb:548:in `real_connect': Access denied for user 'WebU'@'localhost' (using password: YES) (Mysql::Error)

Requires ActiveRecord 2.2.2

I'm currently using AR 2.3.2 on a project and am running issues using taps in a bundle:

No compatible versions could be found for required dependencies:
Conflict on: "activerecord":
* activerecord (2.2.2) activated by taps (= 0.2.26, runtime)
* activerecord (= 2.3.2, runtime) required by rails (= 2.3.2, runtime)
All possible versions of origin requirements conflict.

Is there a reason that taps is married to 2.2.2? Can we use ~> instead of = ?

Support For Postgresql Schemas

Hi,

I'm a heroku user and i'm trying to get data out of each of my pg schemas but its erroring out.
It would be great if I could somehow set the desired schema in the database url like?

heroku db:push postgres://postgres:mypass@remotehost/mydb?schema_name=whatever

Ignores time zone when pulling from PostgreSQL to Sqlite

I am trying to pull my database from Heroku (PostgreSQL) to my local dev machine (Sqlite) but the time zone on all datetime fields seems to be ignored.

So what is "Thu, 05 Nov 2009 14:05:34 UTC +00:00" on the Heroku side becomes "Thu, 05 Nov 2009 23:05:34 UTC +00:00" on my local machine, for example.

This is very annoying as I store files and images in S3 with timestamps in the path. Resulting in all images and files 404:ing on my development machine.

Delete this

Delete this

it was a my db instances problem

json_pure dependency in Heroku/Taps

Both Heroku and Taps have their json_depency set as ~> 1.2.4. The current version of json/json_pure 1.4.0

No other gems have the older version requirement and several gems are pushing me to version 1.4.0

As a result, I get the expected errors about not being able to load json_pure 1.2.4 for heroku or taps, because version 1.4.0 has already loaded.

Please advise. Thank you.

-A.

Taps fails on windows xp if ruby is installed in directory with a space in its name

I have ruby installed in C:\Program Files\Ruby. When I try to run push or pull (with heroku) I get following output:

H:\work\www\rails\cookbook>heroku db:pull
Loaded Taps v0.3.4
Auto-detected local database: postgres://cookbook:xxx@localhost:5432/cookbook_devel?encoding=utf8
Warning: Data in the database 'postgres://cookbook:xxx@localhost:5432/cookbook_devel?encoding=utf8' will be overwritten and will not be recoverable.
Are you sure you wish to continue? (y/n)? y
Receiving schema
Nazwa 'C:/program' nie jest rozpoznawana jako polecenie wewnętrzne lub zewnętrzne, program wykonywalny lub plik wsadowy.
Nazwa 'C:/program' nie jest rozpoznawana jako polecenie wewnętrzne lub zewnętrzne, program wykonywalny lub plik wsadowy.
Nazwa 'C:/program' nie jest rozpoznawana jako polecenie wewnętrzne lub zewnętrzne, program wykonywalny lub plik wsadowy.
Nazwa 'C:/program' nie jest rozpoznawana jako polecenie wewnętrzne lub zewnętrzne, program wykonywalny lub plik wsadowy.
Nazwa 'C:/program' nie jest rozpoznawana jako polecenie wewnętrzne lub zewnętrzne, program wykonywalny lub plik wsadowy.
Nazwa 'C:/program' nie jest rozpoznawana jako polecenie wewnętrzne lub zewnętrzne, program wykonywalny lub plik wsadowy.
(...)
Receiving data
13 tables, 177 records
(...)

The message

Nazwa 'C:/program' nie jest rozpoznawana jako polecenie wewnętrzne lub zewnętrzne, program wykonywalny lub plik wsadowy.

is standard Win XP message meaning that an executable ('C:/program' in this case) can not be found.

The problem lies in Taps::Utils.schema_bin(*args) which tries to execute invalid command. Executed command should be enclosed in parentheses, somewhat like this:

"#{File.dirname(__FILE__)}/../../bin/#{bin('schema')}" #{args.map { |a| "'#{a}'" }.join(' ')}

PGError ERROR: invalid input syntax for integer

I received the above message after executing an add-column-to-table migration in Heroku.

At that point, my app was broken, and the only fix was to heroku rake db:reset, which is drastic.

I didn't have the presence of mind to save Heroku's logs, and Heroku doesn't save them itself, so I don't have much to add. However, I believe the issue related to my use of friendly_id, which executes some integer-to-string-and-back magic to allow you have strings in your URLs.

I say this because Andy Shipman has reported a remarkably similar experience in Heroku's Google Group, and luckily provided more information than I was able to:

http://groups.google.com/group/heroku/browse_thread/thread/f5f3e807dfe7c859#

The table to which I was adding a column was a table directly affected by friendly_id.

I spotted this error in my Heroku Logs while Andy saw it in the console when pushing the app, but it's the same basic idea.

UTF8 error in 0.3.0pre10

I'm not sure whether this one is taps or my data, but mysql2psql works fine, so I'm thinking it's taps. Linked below is a SQL dump of the MySQL database that I'm trying to convert to PostgreSQL. This is the output of taps 0.3.0pre10:

Receiving schema
Receiving data
7 tables, 30,270 records
compliance_ca: 100% |==========================================| Time: 00:00:00
inspections:   100% |==========================================| Time: 00:00:08
facilities:    100% |==========================================| Time: 00:00:02
/Users/titanous/.rvm/gems/ree-1.8.7-2010.01/gems/sequel-3.10.0/lib/sequel/adapters/postgres.rb:163:in `async_exec': PGError: ERROR:  invalid byte sequence for encoding "UTF8": 0xb0 (Sequel::DatabaseError)
HINT:  This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding".

mysql Ver 14.14 Distrib 5.1.45
psql (PostgreSQL) 8.4.3

http://titanous.com/files/eatsafe.tbz

comparison of Symbol with 0 failed (ArgumentError)

Hello,

when I'm trying to push my database to heroku with

heroku db:push

after doing

heroku db:reset

I get the following error:

XXXX victor$ heroku db:push
Loaded Taps v0.3.0
Auto-detected local database: postgres://[email protected]/XXXX?encoding=utf8
Sending schema
Sending data
4 tables, 170,276 records
schema_migrat: 100% |==========================================| Time: 00:00:01
/opt/local/lib/ruby/gems/1.9.1/gems/taps-0.3.0/lib/taps/data_stream.rb:258:in >': comparison of Symbol with 0 failed (ArgumentError) from /opt/local/lib/ruby/gems/1.9.1/gems/taps-0.3.0/lib/taps/data_stream.rb:258:inblock (2 levels) in load_buffer'
from /opt/local/lib/ruby/gems/1.9.1/gems/sequel-3.10.0/lib/sequel/core.rb:249:in instance_eval' from /opt/local/lib/ruby/gems/1.9.1/gems/sequel-3.10.0/lib/sequel/core.rb:249:invirtual_row'
from /opt/local/lib/ruby/gems/1.9.1/gems/sequel-3.10.0/lib/sequel/dataset/query.rb:410:in filter_expr' from /opt/local/lib/ruby/gems/1.9.1/gems/sequel-3.10.0/lib/sequel/dataset/query.rb:379:in_filter'
from /opt/local/lib/ruby/gems/1.9.1/gems/sequel-3.10.0/lib/sequel/dataset/query.rb:105:in filter' from /opt/local/lib/ruby/gems/1.9.1/gems/taps-0.3.0/lib/taps/data_stream.rb:258:inblock in load_buffer'
from /opt/local/lib/ruby/gems/1.9.1/gems/taps-0.3.0/lib/taps/data_stream.rb:253:in loop' from /opt/local/lib/ruby/gems/1.9.1/gems/taps-0.3.0/lib/taps/data_stream.rb:253:inload_buffer'
from /opt/local/lib/ruby/gems/1.9.1/gems/taps-0.3.0/lib/taps/data_stream.rb:273:in fetch_buffered' from /opt/local/lib/ruby/gems/1.9.1/gems/taps-0.3.0/lib/taps/data_stream.rb:289:infetch_rows'
from /opt/local/lib/ruby/gems/1.9.1/gems/taps-0.3.0/lib/taps/data_stream.rb:107:in fetch' from /opt/local/lib/ruby/gems/1.9.1/gems/taps-0.3.0/lib/taps/operation.rb:469:inblock (2 levels) in push_data_from_table'
from /opt/local/lib/ruby/gems/1.9.1/gems/taps-0.3.0/lib/taps/utils.rb:78:in calculate_chunksize' from /opt/local/lib/ruby/gems/1.9.1/gems/taps-0.3.0/lib/taps/operation.rb:467:inblock in push_data_from_table'
from /opt/local/lib/ruby/gems/1.9.1/gems/taps-0.3.0/lib/taps/operation.rb:459:in loop' from /opt/local/lib/ruby/gems/1.9.1/gems/taps-0.3.0/lib/taps/operation.rb:459:inpush_data_from_table'
from /opt/local/lib/ruby/gems/1.9.1/gems/taps-0.3.0/lib/taps/operation.rb:454:in block in push_data' from /opt/local/lib/ruby/gems/1.9.1/gems/taps-0.3.0/lib/taps/operation.rb:449:ineach'
from /opt/local/lib/ruby/gems/1.9.1/gems/taps-0.3.0/lib/taps/operation.rb:449:in push_data' from /opt/local/lib/ruby/gems/1.9.1/gems/taps-0.3.0/lib/taps/operation.rb:384:inrun'
from /opt/local/lib/ruby/gems/1.9.1/gems/taps-0.3.0/lib/taps/cli.rb:159:in clientxfer' from /opt/local/lib/ruby/gems/1.9.1/gems/heroku-1.9.0/lib/heroku/commands/db.rb:147:intaps_client'
from /opt/local/lib/ruby/gems/1.9.1/gems/heroku-1.9.0/lib/heroku/commands/db.rb:20:in push' from /opt/local/lib/ruby/gems/1.9.1/gems/heroku-1.9.0/lib/heroku/command.rb:48:inrun_internal'
from /opt/local/lib/ruby/gems/1.9.1/gems/heroku-1.9.0/lib/heroku/command.rb:20:in run' from /opt/local/lib/ruby/gems/1.9.1/gems/heroku-1.9.0/bin/heroku:14:in<top (required)>'
from /opt/local/bin/heroku:19:in load' from /opt/local/bin/heroku:19:in

'

`taps pull` from remote mysql server to local mysql server is failing

Hello. I'm not able to get a pull working. I have mysql on an Ubuntu slice version:
mysql Ver 14.12 Distrib 5.0.51a, for debian-linux-gnu (x86_64) using readline 5.2

When I start up the server and hit it with a "taps pull...." from my local machine (running the same application code but with an empty database), here is the first part of the server log. My http user is "foo".

== Sinatra/1.0 has taken the stage on 5000 for production with backup from Mongrel
68.48.194.117 - foo [25/Jul/2010 21:55:23] "GET / HTTP/1.1" 200 - 0.0013
68.48.194.117 - foo [25/Jul/2010 21:55:23] "POST /sessions HTTP/1.1" 200 - 0.0647
68.48.194.117 - foo [25/Jul/2010 21:55:23] "GET /sessions/6659500699/pull/table_names HTTP/1.1" 200 - 0.0087
68.48.194.117 - foo [25/Jul/2010 21:55:23] "POST /sessions/6659500699/pull/table_count HTTP/1.1" 200 - 0.0100
68.48.194.117 - foo [25/Jul/2010 21:55:24] "POST /sessions/6659500699/pull/table_count HTTP/1.1" 200 - 0.0073
68.48.194.117 - foo [25/Jul/2010 21:55:24] "POST /sessions/6659500699/pull/table_count HTTP/1.1" 200 - 0.0133
68.48.194.117 - foo [25/Jul/2010 21:55:24] "POST /sessions/6659500699/pull/table_count HTTP/1.1" 200 - 0.0073
68.48.194.117 - foo [25/Jul/2010 21:55:24] "POST /sessions/6659500699/pull/table_count HTTP/1.1" 200 - 0.0076
68.48.194.117 - foo [25/Jul/2010 21:55:25] "POST /sessions/6659500699/pull/table_count HTTP/1.1" 200 - 0.0087
68.48.194.117 - foo [25/Jul/2010 21:55:25] "POST /sessions/6659500699/pull/table_count HTTP/1.1" 200 - 0.0073
68.48.194.117 - foo [25/Jul/2010 21:55:25] "POST /sessions/6659500699/pull/table_count HTTP/1.1" 200 - 0.0085
68.48.194.117 - foo [25/Jul/2010 21:55:25] "POST /sessions/6659500699/pull/table_count HTTP/1.1" 200 - 0.0089
68.48.194.117 - foo [25/Jul/2010 21:55:26] "POST /sessions/6659500699/pull/table_count HTTP/1.1" 200 - 0.0080
/usr/lib/ruby/gems/1.8/gems/taps-0.3.11/bin/schema:3:in `require': no such file to load -- rubygems (LoadError)
    from /usr/lib/ruby/gems/1.8/gems/taps-0.3.11/bin/schema:3
68.48.194.117 - foo [25/Jul/2010 21:55:26] "POST /sessions/6659500699/pull/schema HTTP/1.1" 200 - 0.0804
/usr/lib/ruby/gems/1.8/gems/taps-0.3.11/bin/schema:3:in `require': no such file to load -- rubygems (LoadError)
    from /usr/lib/ruby/gems/1.8/gems/taps-0.3.11/bin/schema:3
68.48.194.117 - foo [25/Jul/2010 21:55:27] "POST /sessions/6659500699/pull/schema HTTP/1.1" 200 - 0.0867
/usr/lib/ruby/gems/1.8/gems/taps-0.3.11/bin/schema:3:in `require': no such file to load -- rubygems (LoadError)
    from /usr/lib/ruby/gems/1.8/gems/taps-0.3.11/bin/schema:3

Should it really be trying to pull the sessions table?

On the local Macbook side of things, I also have the Rails application configured with mysql in development version:
mysql Ver 14.14 Distrib 5.1.41, for apple-darwin10.2.0 (i386) using EditLine wrapper

Here is a snip of the errors I get locally.

Receiving schema
/Library/Ruby/Gems/1.8/gems/taps-0.3.11/bin/../lib/taps/schema.rb:64:in `load': undefined method `apply' for nil:NilClass (NoMethodError)
    from /Library/Ruby/Gems/1.8/gems/sequel-3.13.0/lib/sequel/database/connecting.rb:73:in `connect'
    from /Library/Ruby/Gems/1.8/gems/sequel-3.13.0/lib/sequel/core.rb:111:in `connect'
    from /Library/Ruby/Gems/1.8/gems/taps-0.3.11/bin/../lib/taps/schema.rb:62:in `load'
    from /Library/Ruby/Gems/1.8/gems/taps-0.3.11/bin/schema:44
/Library/Ruby/Gems/1.8/gems/taps-0.3.11/bin/../lib/taps/schema.rb:64:in `load': undefined method `apply' for nil:NilClass (NoMethodError)
    from /Library/Ruby/Gems/1.8/gems/sequel-3.13.0/lib/sequel/database/connecting.rb:73:in `connect'
    from /Library/Ruby/Gems/1.8/gems/sequel-3.13.0/lib/sequel/core.rb:111:in `connect'
    from /Library/Ruby/Gems/1.8/gems/taps-0.3.11/bin/../lib/taps/schema.rb:62:in `load'
    from /Library/Ruby/Gems/1.8/gems/taps-0.3.11/bin/schema:44
/Library/Ruby/Gems/1.8/gems/taps-0.3.11/bin/../lib/taps/schema.rb:64:in `load': undefined method `apply' for nil:NilClass (NoMethodError)
    from /Library/Ruby/Gems/1.8/gems/sequel-3.13.0/lib/sequel/database/connecting.rb:73:in `connect'
    from /Library/Ruby/Gems/1.8/gems/sequel-3.13.0/lib/sequel/core.rb:111:in `connect'
    from /Library/Ruby/Gems/1.8/gems/taps-0.3.11/bin/../lib/taps/schema.rb:62:in `load'

I have taps 0.3.11 installed on both the slice and macbook. I have tried various combinations of deleting the database and not migrating it, since it appears to be pulling the schema and data, and trying to load the schema first without data.

Later on when the schema is done error-ing, I'll get new errors related to the data. I have a "comment" model (it is a blogging app, with article model etc.) and will see an error explaining this table is missing, but it doesn't complain about the table missing for other models.

Schema:        100% |==========================================| Time: 00:00:07
Receiving data
10 tables, 143 records
/Library/Ruby/Gems/1.8/gems/sequel-3.13.0/lib/sequel/adapters/mysql.rb:169:in `query': Mysql::Error: Table 'rehash_webandy_development.comments' doesn't exist (Sequel::DatabaseError)
    from /Library/Ruby/Gems/1.8/gems/sequel-3.13.0/lib/sequel/adapters/mysql.rb:169:in `_execute'
    from /Library/Ruby/Gems/1.8/gems/sequel-3.13.0/lib/sequel/database/logging.rb:23:in `log_yield'
    from /Library/Ruby/Gems/1.8/gems/sequel-3.13.0/lib/sequel/adapters/mysql.rb:169:in `_execute'
    from /Library/Ruby/Gems/1.8/gems/sequel-3.13.0/lib/sequel/adapters/mysql.rb:153:in `execute'
    from /Library/Ruby/Gems/1.8/gems/sequel-3.13.0/lib/sequel/connection_pool/threaded.rb:84:in `hold'
    from /Library/Ruby/Gems/1.8/gems/sequel-3.13.0/lib/sequel/database/connecting.rb:189:in `synchronize'
    from /Library/Ruby/Gems/1.8/gems/sequel-3.13.0/lib/sequel/adapters/mysql.rb:153:in `execute'
    from /Library/Ruby/Gems/1.8/gems/sequel-3.13.0/lib/sequel/dataset/actions.rb:392:in `execute'
    from /Library/Ruby/Gems/1.8/gems/sequel-3.13.0/lib/sequel/adapters/mysql.rb:407:in `execute'
    from /Library/Ruby/Gems/1.8/gems/sequel-3.13.0/lib/sequel/adapters/mysql.rb:333:in `fetch_rows'
    from /Library/Ruby/Gems/1.8/gems/sequel-3.13.0/lib/sequel/dataset/actions.rb:101:in `each'
    from /Library/Ruby/Gems/1.8/gems/sequel-3.13.0/lib/sequel/dataset/actions.rb:248:in `map'
    from /Library/Ruby/Gems/1.8/gems/sequel-3.13.0/lib/sequel/dataset/actions.rb:248:in `map'
    from /Library/Ruby/Gems/1.8/gems/sequel-3.13.0/lib/sequel/adapters/shared/mysql.rb:235:in `schema_parse_table'
    from /Library/Ruby/Gems/1.8/gems/sequel-3.13.0/lib/sequel/database/query.rb:129:in `schema'
    from /Library/Ruby/Gems/1.8/gems/taps-0.3.11/bin/../lib/taps/utils.rb:140:in `single_integer_primary_key'
    from /Library/Ruby/Gems/1.8/gems/taps-0.3.11/bin/../lib/taps/data_stream.rb:214:in `factory'
    from /Library/Ruby/Gems/1.8/gems/taps-0.3.11/bin/../lib/taps/operation.rb:259:in `pull_data'
    from /Library/Ruby/Gems/1.8/gems/taps-0.3.11/bin/../lib/taps/operation.rb:257:in `each'
    from /Library/Ruby/Gems/1.8/gems/taps-0.3.11/bin/../lib/taps/operation.rb:257:in `pull_data'
    from /Library/Ruby/Gems/1.8/gems/taps-0.3.11/bin/../lib/taps/operation.rb:221:in `run'
    from /Library/Ruby/Gems/1.8/gems/taps-0.3.11/bin/../lib/taps/cli.rb:164:in `clientxfer'
    from /Library/Ruby/Gems/1.8/gems/taps-0.3.11/bin/../lib/taps/cli.rb:33:in `pull'
    from /Library/Ruby/Gems/1.8/gems/taps-0.3.11/bin/../lib/taps/cli.rb:21:in `send'
    from /Library/Ruby/Gems/1.8/gems/taps-0.3.11/bin/../lib/taps/cli.rb:21:in `run'
    from /Library/Ruby/Gems/1.8/gems/taps-0.3.11/bin/taps:6
    from /usr/bin/taps:19:in `load'
    from /usr/bin/taps:19

I'd really love to be able to use taps. This is the last step I have pulling down my remote database in preparation for moving my site over to Heroku. I suppose I could just take a regular mysqldump file and import that, but I wanted to see if any of these issues were valid issues first. I'm assuming I'll have an easier time on the db:push side of things once I get the database set up locally ok.

The blog post I've followed so far is this one: http://adam.heroku.com/past/2009/2/11/taps_for_easy_database_transfers/

Thanks!

sqlite3 to postgres problems

I was moving a database from sqlite3 to postgres, and thought I would describe the problems.

varchar(255) columns - in sqlite3 these can hold strings longer than 255, but not in postgres
varchar/text columns - in sqlite3 these can hold bytes with values > 127, and I couldn't figure out how to enable whatever translation was needed, I ended up patching the sqlite3 gem to convert them all to utf-8 before returning them to sequel.
timestamp columns - There were a bunch of records with null timestamps. These I updated until they were all valid timestamps.

Dates before 1970

I'm moving a mysql db to postgres and when I try to transfer any dates before 1970 it crashes with this message:

C:/Ruby/lib/ruby/gems/1.8/gems/sequel-3.0.0/lib/sequel/core.rb:156:in string_to_datetime': Invalid Time value 'Sequel' (time out of range) (Sequel::InvalidValue) from C:/Ruby/lib/ruby/gems/1.8/gems/sequel-3.0.0/lib/sequel/adapters/postgres.rb:97 from C:/Ruby/lib/ruby/gems/1.8/gems/sequel-3.0.0/lib/sequel/adapters/postgres.rb:322:incall'
from C:/Ruby/lib/ruby/gems/1.8/gems/sequel-3.0.0/lib/sequel/adapters/postgres.rb:322:in fetch_rows' from C:/Ruby/lib/ruby/gems/1.8/gems/sequel-3.0.0/lib/sequel/adapters/postgres.rb:320:ineach'
from C:/Ruby/lib/ruby/gems/1.8/gems/sequel-3.0.0/lib/sequel/adapters/postgres.rb:320:in fetch_rows' from C:/Ruby/lib/ruby/gems/1.8/gems/sequel-3.0.0/lib/sequel/adapters/postgres.rb:318:intimes'
from C:/Ruby/lib/ruby/gems/1.8/gems/sequel-3.0.0/lib/sequel/adapters/postgres.rb:318:in fetch_rows' from C:/Ruby/lib/ruby/gems/1.8/gems/sequel-3.0.0/lib/sequel/adapters/postgres.rb:148:inexecute'
... 23 levels...
from C:/Ruby/lib/ruby/gems/1.8/gems/heroku-1.4/bin/../lib/heroku/command.rb:11:in run' from C:/Ruby/lib/ruby/gems/1.8/gems/heroku-1.4/bin/heroku:14 from C:/Ruby/bin/heroku:19:inload'
from C:/Ruby/bin/heroku:19

Any ideas?

SQLite3::SQLException: unrecognized token: "`"

Both Ruby 1.8.6 and 1.9.1, taps 0.3.5, sqlite3-ruby 1.25 on top of sqlite3 3.6.23.1 installed via MacPorts.

I get this error consistently when running:

taps server sqlite://db/development.sqlite3 user pass

-d doesn't provide any more detail. Is there something else I can do or set to provide more output?

Starting server fails....union: can't convert Array into String (TypeError)

Hello. I installed taps on my Ubuntu 8.04 slice hoping to move the db schema + data to a local copy. I am unable to start the server. I installed the latest version of taps and an older version of taps I needed to get working on my local Mac with Heroku (which happened to be version 0.2.26).

Here is what the older version install looked like:
sudo gem install taps -v 0.2.26 --no-rdoc --no-ri
Successfully installed thor-0.9.9
Successfully installed rest-client-1.3.1
Successfully installed sequel-3.0.0
Successfully installed taps-0.2.26

If I uninstall that and get the latest:
$ sudo gem install taps
Successfully installed taps-0.3.11

I have the following versions of rack and sinatra if that makes a difference?
rack (1.2.1...)
sinatra (1.0...)

$ taps server "mysql://localhost/mydb?user=user&password=pwd" foo bar123
/usr/lib/ruby/gems/1.8/gems/rack-1.2.1/lib/rack/utils.rb:138:in union': can't convert Array into String (TypeError) from /usr/lib/ruby/gems/1.8/gems/rack-1.2.1/lib/rack/utils.rb:138 from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:ingem_original_require'
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in require' from /usr/lib/ruby/gems/1.8/gems/rack-1.2.1/lib/rack/request.rb:1 from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:ingem_original_require'
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in require' from /usr/lib/ruby/gems/1.8/gems/rack-1.2.1/lib/rack/showexceptions.rb:3 from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:ingem_original_require'
... 14 levels...
from /usr/lib/ruby/gems/1.8/gems/thor-0.9.9/lib/thor.rb:78:in start' from /usr/lib/ruby/gems/1.8/gems/taps-0.2.26/bin/taps:13 from /usr/bin/taps:19:inload'
from /usr/bin/taps:19

I'm referencing this blog post:
http://adam.heroku.com/past/2009/2/11/taps_for_easy_database_transfers/

Anything else I can try?

heroku db:push for a spree app

I am trying to push a regular spree database with sample data to heroku. The app works fine on the local host.

$ heroku db:push
Loaded Taps v0.3.11
Auto-detected local database: postgres://[email protected]/db/development?encod
ing=utf8
Warning: Data in the app 'blooming-mist-92' will be overwritten and will not be
recoverable.
Are you sure you wish to continue? (y/n)? y
Sending schema
Schema: 100% |==========================================| Time: 00:19:49
Sending indexes
schema_migrat: 100% |==========================================| Time: 00:00:00
assets: 100% |==========================================| Time: 00:00:01
...

users: 100% |==========================================| Time: 00:00:00
Sending data
53 tables, 3,286 records
countries: 0% | | ETA: --:--:--
Saving session to push_201008072116.dat..
!!! Caught Server Exception
HTTP CODE: 500
Taps Server Error: undefined method size' for nil:NilClass /usr/ruby1.8.7/lib/ruby/gems/1.8/gems/json-1.2.0/lib/json/pure/parser.rb:91:in
initialize'...

I've tried using mysql and sqlite3 databases and was getting the same error.
Any ideas on how to fix this?

pull exception with 0.3.7 and 0.3.8

On a Win7 system using either 1.8.7p249 or 1.9.1p378 from http://rubyinstaller.org/ I get the following exception used with heroku. Previous version of Taps worked fine with 1.8.7p249 so it appears something new in 0.3.7 is causing the exception.

While it appears the issue is Taps-specific I'm not clear whether it may be the heroku gem. I originally posted to http://groups.google.com/group/heroku/browse_thread/thread/15526a6563b4096c with no response yet.

I haven't looked at Taps "schema.cmd" yet for any arg passing issues...no spaces in any of the involved paths.

C:\Users\Jon\Documents\WebDev\rubyinstaller.heroku.com>heroku db:pull sqlite://app-backup.db
Loaded Taps v0.3.8
Warning: Data in the database 'sqlite://app-backup.db' will be overwritten and will not be recoverable.
Are you sure you wish to continue? (y/n)? y
Receiving schema
c:/ruby187/lib/ruby/gems/1.8/gems/taps-0.3.8/lib/taps/utils.rb:126:in ``': No such file or directory - 'c:/ruby187/lib/ruby/gems/1.8/gems/taps-0.3.8/bin/schema.cmd' 'load'
'sqlite://app-backup.db' 'C:/Users/Jon/AppData/Local/Temp/taps20100604-3656-73b1ct-0'
(Errno::ENOENT)
from c:/ruby187/lib/ruby/gems/1.8/gems/taps-0.3.8/lib/taps/utils.rb:126:insc hema_bin' from c:/ruby187/lib/ruby/gems/1.8/gems/taps-0.3.8/lib/taps/utils.rb:113:in lo
ad_schema'
from c:/ruby187/lib/ruby/1.8/tempfile.rb:188:in`open'
from c:/ruby187/lib/ruby/gems/1.8/gems/taps-0.3.8/lib/taps/utils.rb:111:in `lo
ad_schema'
from c:/ruby187/lib/ruby/gems/1.8/gems/taps-0.3.8/lib/taps/operation.rb:244:in
`pull_schema'
from c:/ruby187/lib/ruby/gems/1.8/gems/taps-0.3.8/lib/taps/operation.rb:242:in
`each'
from c:/ruby187/lib/ruby/gems/1.8/gems/taps-0.3.8/lib/taps/operation.rb:242:in
`pull_schema'
from c:/ruby187/lib/ruby/gems/1.8/gems/taps-0.3.8/lib/taps/operation.rb:216:in
`run'
from c:/ruby187/lib/ruby/gems/1.8/gems/taps-0.3.8/lib/taps/cli.rb:164:in`clie
ntxfer'
from c:/ruby187/lib/ruby/gems/1.8/gems/heroku-1.9.9/lib/heroku/commands/db.rb:
151:in `taps_client'
from c:/ruby187/lib/ruby/gems/1.8/gems/heroku-1.9.9/lib/heroku/commands/db.rb:
23:in`pull'
from c:/ruby187/lib/ruby/gems/1.8/gems/heroku-1.9.9/lib/heroku/command.rb:48:i
n `send'
from c:/ruby187/lib/ruby/gems/1.8/gems/heroku-1.9.9/lib/heroku/command.rb:48:i
n`run_internal'
from c:/ruby187/lib/ruby/gems/1.8/gems/heroku-1.9.9/lib/heroku/command.rb:20:i
n `run'
from c:/ruby187/lib/ruby/gems/1.8/gems/heroku-1.9.9/bin/heroku:13
from c:/ruby187/bin/heroku:19:in`load'
from c:/ruby187/bin/heroku:19

Incorrect Console Output During Pull

I recently installed the latest version of taps (v0.3.13) on Ruby 1.9.2p0 (installed via RVM) and I'm getting some strange output. This is completely non-critical, but it clutters up the console when the progress bar prints across multiple lines. Oddly, it's not an issue when Receiving data, just the first two steps (schema & indexes).



~/Git/sqoot (v2.0.0)> heroku db:pull
Loaded Taps v0.3.13
Auto-detected local database: postgres://127.0.0.1/sqoot_development?encoding=utf8
Warning: Data in the database 'postgres://127.0.0.1/sqoot_development?encoding=utf8' will be overwritten and will not be recoverable.
Are you sure you wish to continue? (y/n)? y
Receiving schema
Schema:          0% |                                          | ETA:  --:--:--
Schema:          8% |===                                       | ETA:  00:00:13
Schema:         16% |======                                    | ETA:  00:00:16
Schema:         25% |==========                                | ETA:  00:00:13
Schema:         33% |=============                             | ETA:  00:00:11
Schema:         41% |=================                         | ETA:  00:00:09
Schema:         50% |=====================                     | ETA:  00:00:08
Schema:         58% |========================                  | ETA:  00:00:07
Schema:         66% |===========================               | ETA:  00:00:06
Schema:         75% |===============================           | ETA:  00:00:04
Schema:         83% |==================================        | ETA:  00:00:03
Schema:         91% |======================================    | ETA:  00:00:01
Schema:        100% |==========================================| Time: 00:00:18
Receiving indexes
schema_migrat:   0% |                                          | ETA:  --:--:--
schema_migrat: 100% |==========================================| Time: 00:00:00
connections:     0% |                                          | ETA:  --:--:--
connections:    33% |=============                             | ETA:  00:00:00
connections:    66% |===========================               | ETA:  00:00:00
connections:   100% |==========================================| Time: 00:00:01
participation:   0% |                                          | ETA:  --:--:--
participation:  33% |=============                             | ETA:  00:00:00
participation:  66% |===========================               | ETA:  00:00:00
participation: 100% |==========================================| Time: 00:00:01
taggings:        0% |                                          | ETA:  --:--:--
taggings:       50% |=====================                     | ETA:  00:00:00
taggings:      100% |==========================================| Time: 00:00:00
slugs:           0% |                                          | ETA:  --:--:--
slugs:          50% |=====================                     | ETA:  00:00:00
slugs:         100% |==========================================| Time: 00:00:00
tags:            0% |                                          | ETA:  --:--:--
tags:          100% |==========================================| Time: 00:00:00
plans:           0% |                                          | ETA:  --:--:--
plans:         100% |==========================================| Time: 00:00:00
users:           0% |                                          | ETA:  --:--:--
users:          33% |=============                             | ETA:  00:00:00
users:          66% |===========================               | ETA:  00:00:00
users:         100% |==========================================| Time: 00:00:01
Receiving data
12 tables, 2,400 records
schema_migrat: 100% |==========================================| Time: 00:00:00
delayed_jobs:  100% |==========================================| Time: 00:00:04
connections:   100% |==========================================| Time: 00:00:05
comments:      100% |==========================================| Time: 00:00:01
participation: 100% |==========================================| Time: 00:00:03
tweets:        100% |==========================================| Time: 00:00:00
invitations:   100% |==========================================| Time: 00:00:12
taggings:      100% |==========================================| Time: 00:00:02
slugs:         100% |==========================================| Time: 00:00:03
tags:          100% |==========================================| Time: 00:00:00
plans:         100% |==========================================| Time: 00:00:03
users:         100% |==========================================| Time: 00:00:05
Resetting sequences

I'm using Terminal 2.1.1 with some additional bash enhancements (http://github.com/avand/dotfiles).

This doesn't happen if I switch to Ruby 1.8.7-p174 (using RVM).

Allow later versions of sqlite3

I'm not sure why only versions of sqlite3 1.2.0.x were chosen, but I have an app that needs sqlite3 1.3.0, but the taps dependencies cause a conflict.

utils.rb schema_bin doesn't properly escape Windows filespecs with embedded spaces

schema_bin wasn't properly escaping filenames with embedded spaces:
Sending schema
'c:/program' is not recognized as an internal or external command,TA: --:--:--
operable program or batch file.
'c:/program' is not recognized as an internal or external command,TA: 00:00:17
operable program or batch file.
...

This change to utils.rb:125 in ricardochimal-taps-v0.3.6-1-g9141fbe.zip fixed it:
def schema_bin(*args)
# #{File.dirname(__FILE__)}/../../bin/#{bin('schema')} #{args.map { |a| "'#{a}'" }.join(' ')}
File.dirname(FILE)+'/../../bin/'+bin('schema')+' '+args.map { |a| "'#{a}'" }.join(' ')
end

JSON.parsed fed non-JSON filespec

JSON.parsed is called in lib\taps\operation.rb:409. In my case, the argument passed is this:
c:/program files/ruby/lib/ruby/gems/1.9.1/gems/taps-0.3.6/lib/taps/../../bin/schema.cmd
'indexes_individual'
'mysql://root:password@localhost/app?encoding=utf8'
(line wrapped for clarity)

JSON.parsed complains that
c:/program files/ruby/lib/ruby/gems/1.9.1/gems/json_pure-1.4.3/lib/json/pure/parser.rb:143:in parse': source 'c:/program files/rub' not in JSON! (JSON::ParserError) from c:/program files/ruby/lib/ruby/gems/1.9.1/gems/json_pure-1.4.3/lib/json/common.rb:146:inparse'
from c:/program files/ruby/lib/ruby/gems/1.9.1/gems/taps-0.3.6/lib/taps/operation.rb:411:in push_indexes' from c:/program files/ruby/lib/ruby/gems/1.9.1/gems/taps-0.3.6/lib/taps/operation.rb:387:inrun'

I'm running json_pure 1.4.3 and ricardochimal-taps-v0.3.6-1-g9141fbe.zip
Thank you for any help you might be able to provide.

Read-only file system error when pushing to heroku

Using the heroku db:push command, I get a code 500 from the server, and error:

m90-130-201-189:sample_app pnutus$ heroku db:push
Loaded Taps v0.3.12
Auto-detected local database: sqlite://db/development.sqlite3
Warning: Data in the app 'high-ocean-35' will be overwritten and will not be recoverable.
Are you sure you wish to continue? (y/n)? y
Sending schema
Schema:        100% |==========================================| Time: 00:00:04
Sending indexes
users:         100% |==========================================| Time: 00:00:00
schema_migrat: 100% |==========================================| Time: 00:00:00
microposts:    100% |==========================================| Time: 00:00:00
Sending data
3 tables, 103 records
users:           0% |                                          | ETA:  --:--:--
Saving session to push_201009142336.dat..
!!! Caught Server Exception
HTTP CODE: 500
Taps Server Error: Read-only file system - dump.20359.dat
./lib/taps/data_stream.rb:194:in `initialize'./lib/taps/data_stream.rb:194:in `open'./lib/taps/data_stream.rb:194:in `parse_encoded_data'./lib/taps/data_stream.rb:152:in `fetch_remote_in_server'./lib/taps/server.rb:55:in `POST /sessions/:key/push/table'./lib/taps/db_session.rb:15:in `conn'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/sequel-3.15.0/lib/sequel/database/connecting.rb:74:in `connect'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/sequel-3.15.0/lib/sequel/core.rb:119:in `connect'./lib/taps/db_session.rb:14:in `conn'./lib/taps/server.rb:52:in `POST /sessions/:key/push/table'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/sinatra-1.0/lib/sinatra/base.rb:863:in `call'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/sinatra-1.0/lib/sinatra/base.rb:863:in `route'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/sinatra-1.0/lib/sinatra/base.rb:521:in `instance_eval'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/sinatra-1.0/lib/sinatra/base.rb:521:in `route_eval'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/sinatra-1.0/lib/sinatra/base.rb:500:in `route!'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/sinatra-1.0/lib/sinatra/base.rb:497:in `catch'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/sinatra-1.0/lib/sinatra/base.rb:497:in `route!'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/sinatra-1.0/lib/sinatra/base.rb:476:in `each'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/sinatra-1.0/lib/sinatra/base.rb:476:in `route!'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/sinatra-1.0/lib/sinatra/base.rb:601:in `dispatch!'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/sinatra-1.0/lib/sinatra/base.rb:411:in `call!'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/sinatra-1.0/lib/sinatra/base.rb:566:in `instance_eval'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/sinatra-1.0/lib/sinatra/base.rb:566:in `invoke'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/sinatra-1.0/lib/sinatra/base.rb:566:in `catch'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/sinatra-1.0/lib/sinatra/base.rb:566:in `invoke'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/sinatra-1.0/lib/sinatra/base.rb:411:in `call!'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/sinatra-1.0/lib/sinatra/base.rb:399:in `call'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/rack-1.1.0/lib/rack/auth/basic.rb:25:in `call'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/sinatra-1.0/lib/sinatra/base.rb:979:in `call'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/sinatra-1.0/lib/sinatra/base.rb:1005:in `synchronize'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/sinatra-1.0/lib/sinatra/base.rb:979:in `call'/home/heroku_rack/lib/static_assets.rb:9:in `call'/home/heroku_rack/lib/last_access.rb:25:in `call'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/rack-1.1.0/lib/rack/urlmap.rb:47:in `call'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/rack-1.1.0/lib/rack/urlmap.rb:41:in `each'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/rack-1.1.0/lib/rack/urlmap.rb:41:in `call'/home/heroku_rack/lib/date_header.rb:14:in `call'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/rack-1.1.0/lib/rack/builder.rb:77:in `call'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/thin-1.2.7/lib/thin/connection.rb:76:in `pre_process'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/thin-1.2.7/lib/thin/connection.rb:74:in `catch'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/thin-1.2.7/lib/thin/connection.rb:74:in `pre_process'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/thin-1.2.7/lib/thin/connection.rb:57:in `process'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/thin-1.2.7/lib/thin/connection.rb:42:in `receive_data'/usr/ruby1.8.7/lib/ruby/gems/1.8/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `run_machine'/usr/ruby1.8.7/lib/ruby/gems/1.8/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `run'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/thin-1.2.7/lib/thin/backends/base.rb:57:in `start'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/thin-1.2.7/lib/thin/server.rb:156:in `start'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/thin-1.2.7/lib/thin/controllers/controller.rb:80:in `start'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/thin-1.2.7/lib/thin/runner.rb:177:in `send'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/thin-1.2.7/lib/thin/runner.rb:177:in `run_command'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/thin-1.2.7/lib/thin/runner.rb:143:in `run!'/home/slugs/150602_f9cc766_44dc/mnt/.gems/gems/thin-1.2.7/bin/thin:6/usr/ruby1.8.7/bin/thin:19:in `load'/usr/ruby1.8.7/bin/thin:19

Why is taps trying to save a dump to my slug? Shouldn't it just put the data in the database? (I'm guessing that's what's causing the error.)

I am using rvm, ruby 1.9.2-p0, taps 0.3.12 and heroku 1.10.2.

pulling to mysql results in myisam tables

hi,

I'm pulling from mysql to mysql and getting myisam tables with latin1 encoding. the original tables were innodb/utf8.

i even set ?encoding=utf8 when i started the server.

is this the expected behavior?

thanks,
Seamus

db:push doesn't actually push data

Taps 0.3.9 on Windows... The following logs show that the "funds" table is pushed in 2 to 12 seconds, but that's because no data gets pushed. It should be 7,176 records of around 12K bytes each. (Name have been changes to protect the guilty.)

Where can I find logs or other clues that might explain what's going on? Thank you.

14:32:25 C:\hf1> heroku db:push
Loaded Taps v0.3.9
Auto-detected local database: mysql://user:pswd@localhost/mydb?encoding=utf8
Warning: Data in the app 'elaborate-hoax-1' will be overwritten and will not be recoverable.
Are you sure you wish to continue? (y/n)? y
Sending schema
Schema: 100% |==========================================| Time: 00:00:17
Sending indexes
sessions: 100% |==========================================| Time: 00:00:01
schema_migrat: 100% |==========================================| Time: 00:00:00
fundscreens: 100% |==========================================| Time: 00:00:01
funds: 100% |==========================================| Time: 00:00:12
flts: 100% |==========================================| Time: 00:00:00
hfrets: 100% |==========================================| Time: 00:00:01
managers: 100% |==========================================| Time: 00:00:01
strategies: 100% |==========================================| Time: 00:00:01
Sending data
12 tables, 668,862 records
sessions: 100% |==========================================| Time: 00:00:00
benchdefaults: 100% |==========================================| Time: 00:00:00
schema_migrat: 100% |==========================================| Time: 00:00:00
feedbacks: 100% |==========================================| Time: 00:00:00
portfolios: 100% |==========================================| Time: 00:00:01
fundscreens: 100% |==========================================| Time: 00:03:13
funds: 100% |==========================================| Time: 00:00:02
users: 100% |==========================================| Time: 00:00:02
hfrets: 100% |==========================================| Time: 00:45:01
flts: 100% |==========================================| Time: 00:00:33
strategies: 100% |==========================================| Time: 00:00:00
managers: 100% |==========================================| Time: 00:00:00
Resetting sequences

15:31:12 C:\hf1> heroku db:push mysql://user:pswd@localhost/mydb?encoding=utf8 --force --tables funds
Loaded Taps v0.3.9
Warning: Data in the app 'elaborate-hoax-1' will be overwritten and will not be recoverable.
Sending schema
Schema: 100% |==========================================| Time: 00:00:01
Sending indexes
funds: 100% |==========================================| Time: 00:00:14
Sending data
1 tables, 7,176 records
funds: 100% |==========================================| Time: 00:00:02
Resetting sequences

15:33:35 C:\hf1>

MySQL varchar as id/primary key fails

When trying to pull a MySQL db that has a id column that is a varchar and primary key, the destination db gets id set to integer causing type mismatch failures:

PGError ERROR:  invalid input syntax for integer: "OK" (Sequel::DatabaseError)
LINE 1: INSERT INTO "test" ("id") VALUES ('OK')

SQLite3::SQLException datatype mismatch (Sequel::DatabaseError)

Pushing data with index first

Hi there,
I'm trying to push to heroku, and it fails when I'm pushing 5 Gigs of data. The data is capable of being uploaded, but it's not able to push the index due to the 30 seconds restriction.

Would it be possible to push the index first, and data later so that it doesn't fail.

Thanks

0.3.2 heroku db:pull throws duplicate key value errors

did a heroku db:pull .. all good.. then upgraded to the latest heroku gem and taps gem.. did a db:pull and got a bunch of errors..
i.e.
/Ruby/lib/ruby/gems/1.8/gems/sequel-3.10.0/lib/sequel/adapters/postgres.rb:163:in `async_exec': PGError: ERROR: duplicate key v
alue violates unique constraint "cities_pkey" (Sequel::DatabaseError)

went into pgadmin and deleted all the tables and did a heroku db:pull and all was well..
ran heroku db:pull again and got the same errors since the tables already existed.

i went from 1.8.0 to 1.9.1
$ gem list|grep heroku
heroku (1.9.1, 1.8.0)

and for taps.. 0.2.25 to 0.3.2
$ gem list|grep taps
taps (0.3.2, 0.2.25)

I posted this issue on heroku github as well since I am not sure the exact source of the issue and the gems are dependent so I cannot downgrade just taps and try..

uninitialized constant Mysql::Error

I was able after some messing around to get the taps server command to run on ubuntu 9.10 running ruby 1.8.

Now when I run this PULL command I get this error and I was wondering if its something I am doing wrong and how to find out. I really want to use taps for keeping a multiple dev environments in sync.

Here is the PULL command I am using
sudo taps pull mysql://[email protected]:/lets_go_dev_trunk http://bjohnson:[email protected]:5000

And I get

Failed to connect to database:
NameError -> uninitialized constant Mysql::Error

I have standard mac ports mysql installation with blank password, and I can connect through client and ruby applications are running.

Ben

CWD needs be writeable for tabs.db

The current working directory where you start up the taps server must be read/writable so the server can create the sqlite://tabs.db file. This is not always the case. I got a very confusing warning:

/Library/Ruby/Gems/1.8/gems/sqlite3-ruby-1.2.5/lib/sqlite3/errors.rb:62:in `check': SQLite3::CantOpenException could not open database: unable to open database file (Sequel::DatabaseConnectionError)

(i.e. To recreate, cd to a read-only directory, then try to start up a taps server)

So, perhaps add a startup check to make sure :taps_database_url is writeable (and print out a warning if it is not), or have the url point, instead, to a temp directory.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.