Giter Site home page Giter Site logo

catarse / dbhero Goto Github PK

View Code? Open in Web Editor NEW
58.0 7.0 13.0 257 KB

DBHero is a simple and elegant web interface to extract data clips from your app database. just plug and play ;)

License: MIT License

Ruby 75.64% CSS 3.79% HTML 15.13% JavaScript 5.45%

dbhero's Introduction

DBHero Build Status Code Climate

DBHero is a simple and elegant web interface to extract data clips from your app database. just plug and play ;)

tested stack:

  • PostgresSQL
  • Ruby 2+
  • Rails 4.1+

Dbhero

installation

include in your Gemfile:

gem 'dbhero'

then run:

rails g dbhero:install

This will create an initializer in config/initializers/dbhero.rb Take a look in this initializer to tweak the default attributes.

and add on your routes file:

 mount Dbhero::Engine => "/dbhero", as: :dbhero

run server and open http://localhost:3000/dbhero

Configurations

On initializer config/initializers/dbhero.rb we can add the following configurations

Dbhero.configure do |config|
  # limits the total of rows that show on clips, if clip result os greather
  # that result rows of query then should show a button to download csv
  # this prevent that browser crashes :)
  config.max_rows_limit = 10_000
  # if you are using devise you can keep the "authenticate_user!"
  config.authenticate = true

  # Method to get the current user authenticated on your app
  # if you are using devise you can keep the "current_user"
  config.current_user_method = :current_user

  # Custom authentication condition hover current_user_method
  config.custom_user_auth_condition = lambda do |user|
    user.admin?
  end

  # String representation for user
  # when creating a dataclip just save on user field
  config.user_representation = :email

  # Google drive integration, uncomment to use ;)
  # you can get you google api credentials here:
  # https://developers.google.com/drive/web/auth/web-server
  # google drive callback url -> /dbhero/dataclips/drive
  config.google_api_id = 'GOOGLE_API_ID'
  config.google_api_secret = 'GOOGLE_API_SECRET'
end

This project rocks and uses MIT-LICENSE.

dbhero's People

Contributors

danielheath avatar devton avatar diogob 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

dbhero's Issues

Error when no dataclip name is provided

When I click "save and refresh" I get the error below if I don't include a dataclip name:

No route matches {:action=>"edit", :controller=>"dbhero/dataclips", :id=>#<Dbhero::Dataclip id: nil, description: "", raw_query: 

Rails 5 export CSV problem

Hello,
After upgrading to Rails 5, the export CSV has broken.

Fixed it changing

format.csv do
   send_data @dataclip.csv_string, type: Mime::CSV, disposition: "attachment; filename=#{@dataclip.token}.csv"
end

to

format.csv do
   send_data @dataclip.csv_string, type: Mime[:csv], disposition: "attachment; filename=#{@dataclip.token}.csv"
end

Error: redirect_uri_mismatch

I've added both my main domain and "https://www.mydomain.com/dbhero/dataclips/drive" to my "Authorized redirect URIs".

However, I get the error "Error: redirect_uri_mismatch" when trying to export the data to Google Drive. If I remove the "/dbhero/dataclips/drive", Google accepts the direct_url but then it doesn't redirect to the correct place.

Google Drive Export Doesn't work

After successfully using Google's Two-Auth, I get:

ActionController::UrlGenerationError: No route matches {:action=>"show", :controller=>"dbhero/dataclips", :format=>"csv", :id=>nil} missing required keys: [:id]

I found that the error is:

Google::APIClient - Please provide :application_name and :application_version when initializing the client

dbhero hangs on Mac

I tried to use dbhero app on Mac (El Capitan) with a local mysql database. It established the connection, displayed the list of tables, and showed the first one I clicked on, but then either did not show me any more tables despite having a new name highlighted or simply hung if the first table was huge.

Update DBHero to work with MySQL

I was trying to run DBHero on a MySQL database and have some issues related to index.

[ec2-user@ip-172-31-26-217 dbhero]$ rake db:migrate
== 20160616203934 CreateDbheroDataclips: migrating ============================
-- create_table(:dbhero_dataclips)
   -> 0.0285s
-- add_index(:dbhero_dataclips, :token, {:unique=>true})
rake aborted!
StandardError: An error has occurred, all later migrations canceled:

Mysql2::Error: BLOB/TEXT column 'token' used in key specification without a key length: CREATE UNIQUE INDEX `index_dbhero_dataclips_on_token`  ON `dbhero_dataclips` (`token`) 
/home/ec2-user/.gem/ruby/2.3/gems/mysql2-0.4.4/lib/mysql2/client.rb:107:in `_query'
/home/ec2-user/.gem/ruby/2.3/gems/mysql2-0.4.4/lib/mysql2/client.rb:107:in `block in query'
/home/ec2-user/.gem/ruby/2.3/gems/mysql2-0.4.4/lib/mysql2/client.rb:106:in `handle_interrupt'
/home/ec2-user/.gem/ruby/2.3/gems/mysql2-0.4.4/lib/mysql2/client.rb:106:in `query'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:305:in `block in execute'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/connection_adapters/abstract_adapter.rb:472:in `block in log'
/usr/local/share/ruby/gems/2.3/gems/activesupport-4.2.6/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/connection_adapters/abstract_adapter.rb:466:in `log'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:305:in `execute'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/connection_adapters/mysql2_adapter.rb:231:in `execute'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:537:in `add_index'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:665:in `block in method_missing'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:634:in `block in say_with_time'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:634:in `say_with_time'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:654:in `method_missing'
/home/ec2-user/dbhero/db/migrate/20160616203934_create_dbhero_dataclips.rb:13:in `change'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:608:in `exec_migration'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:592:in `block (2 levels) in migrate'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:591:in `block in migrate'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:292:in `with_connection'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:590:in `migrate'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:768:in `migrate'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:998:in `block in execute_migration_in_transaction'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:1046:in `ddl_transaction'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:997:in `execute_migration_in_transaction'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:959:in `block in migrate'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:955:in `each'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:955:in `migrate'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:823:in `up'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:801:in `migrate'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/tasks/database_tasks.rb:137:in `migrate'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/railties/databases.rake:44:in `block (2 levels) in <top (required)>'
/usr/local/share/ruby/gems/2.3/gems/rake-11.2.2/exe/rake:27:in `<top (required)>'
ActiveRecord::StatementInvalid: Mysql2::Error: BLOB/TEXT column 'token' used in key specification without a key length: CREATE UNIQUE INDEX `index_dbhero_dataclips_on_token`  ON `dbhero_dataclips` (`token`) 
/home/ec2-user/.gem/ruby/2.3/gems/mysql2-0.4.4/lib/mysql2/client.rb:107:in `_query'
/home/ec2-user/.gem/ruby/2.3/gems/mysql2-0.4.4/lib/mysql2/client.rb:107:in `block in query'
/home/ec2-user/.gem/ruby/2.3/gems/mysql2-0.4.4/lib/mysql2/client.rb:106:in `handle_interrupt'
/home/ec2-user/.gem/ruby/2.3/gems/mysql2-0.4.4/lib/mysql2/client.rb:106:in `query'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:305:in `block in execute'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/connection_adapters/abstract_adapter.rb:472:in `block in log'
/usr/local/share/ruby/gems/2.3/gems/activesupport-4.2.6/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/connection_adapters/abstract_adapter.rb:466:in `log'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:305:in `execute'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/connection_adapters/mysql2_adapter.rb:231:in `execute'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:537:in `add_index'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:665:in `block in method_missing'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:634:in `block in say_with_time'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:634:in `say_with_time'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:654:in `method_missing'
/home/ec2-user/dbhero/db/migrate/20160616203934_create_dbhero_dataclips.rb:13:in `change'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:608:in `exec_migration'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:592:in `block (2 levels) in migrate'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:591:in `block in migrate'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:292:in `with_connection'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:590:in `migrate'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:768:in `migrate'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:998:in `block in execute_migration_in_transaction'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:1046:in `ddl_transaction'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:997:in `execute_migration_in_transaction'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:959:in `block in migrate'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:955:in `each'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:955:in `migrate'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:823:in `up'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:801:in `migrate'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/tasks/database_tasks.rb:137:in `migrate'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/railties/databases.rake:44:in `block (2 levels) in <top (required)>'
/usr/local/share/ruby/gems/2.3/gems/rake-11.2.2/exe/rake:27:in `<top (required)>'
Mysql2::Error: BLOB/TEXT column 'token' used in key specification without a key length
/home/ec2-user/.gem/ruby/2.3/gems/mysql2-0.4.4/lib/mysql2/client.rb:107:in `_query'
/home/ec2-user/.gem/ruby/2.3/gems/mysql2-0.4.4/lib/mysql2/client.rb:107:in `block in query'
/home/ec2-user/.gem/ruby/2.3/gems/mysql2-0.4.4/lib/mysql2/client.rb:106:in `handle_interrupt'
/home/ec2-user/.gem/ruby/2.3/gems/mysql2-0.4.4/lib/mysql2/client.rb:106:in `query'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:305:in `block in execute'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/connection_adapters/abstract_adapter.rb:472:in `block in log'
/usr/local/share/ruby/gems/2.3/gems/activesupport-4.2.6/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/connection_adapters/abstract_adapter.rb:466:in `log'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:305:in `execute'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/connection_adapters/mysql2_adapter.rb:231:in `execute'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:537:in `add_index'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:665:in `block in method_missing'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:634:in `block in say_with_time'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:634:in `say_with_time'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:654:in `method_missing'
/home/ec2-user/dbhero/db/migrate/20160616203934_create_dbhero_dataclips.rb:13:in `change'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:608:in `exec_migration'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:592:in `block (2 levels) in migrate'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:591:in `block in migrate'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:292:in `with_connection'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:590:in `migrate'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:768:in `migrate'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:998:in `block in execute_migration_in_transaction'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:1046:in `ddl_transaction'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:997:in `execute_migration_in_transaction'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:959:in `block in migrate'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:955:in `each'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:955:in `migrate'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:823:in `up'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/migration.rb:801:in `migrate'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/tasks/database_tasks.rb:137:in `migrate'
/usr/local/share/ruby/gems/2.3/gems/activerecord-4.2.6/lib/active_record/railties/databases.rake:44:in `block (2 levels) in <top (required)>'
/usr/local/share/ruby/gems/2.3/gems/rake-11.2.2/exe/rake:27:in `<top (required)>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

My environment:

[ec2-user@ip dbhero]$ cat /etc/*-release
NAME="Amazon Linux AMI"
VERSION="2016.03"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2016.03"
PRETTY_NAME="Amazon Linux AMI 2016.03"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:amazon:linux:2016.03:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"
Amazon Linux AMI release 2016.03

[ec2-user@ip dbhero]$ gem list
*** LOCAL GEMS ***

actionmailer (4.2.6)
actionpack (4.2.6)
actionview (4.2.6)
activejob (4.2.6)
activemodel (4.2.6)
activerecord (4.2.6)
activesupport (4.2.6)
addressable (2.4.0)
arel (6.0.3)
bigdecimal (1.2.8)
binding_of_caller (0.7.2)
builder (3.2.2)
bundler (1.12.5)
byebug (9.0.5)
coffee-rails (4.1.1)
coffee-script (2.4.1)
coffee-script-source (1.10.0)
concurrent-ruby (1.0.2)
dbhero (1.1.9)
debug_inspector (0.0.2)
erubis (2.7.0)
execjs (2.7.0)
faraday (0.9.2)
globalid (0.3.6)
google-api-client (0.9.9)
google_drive (2.0.1)
googleauth (0.5.1)
has_scope (0.7.0)
httpclient (2.8.0)
hurley (0.2)
i18n (0.7.0)
io-console (0.4.5)
jbuilder (2.5.0)
jquery-rails (4.1.1)
json (1.8.3)
jwt (1.5.1)
little-plugger (1.1.4)
logging (2.1.0)
loofah (2.0.3)
mail (2.6.4)
memoist (0.14.0)
mime-types (3.1)
mime-types-data (3.2016.0521)
mini_portile2 (2.1.0)
minitest (5.9.0)
multi_json (1.12.1)
multi_xml (0.5.5)
multipart-post (2.0.0)
mysql2 (0.4.4)
nokogiri (1.6.8)
oauth (0.5.1)
oauth2 (1.1.0)
os (0.9.6)
pkg-config (1.1.7)
power_assert (0.2.7)
psych (2.0.17)
rack (1.6.4)
rack-test (0.6.3)
rails (4.2.6)
rails-deprecated_sanitizer (1.0.3)
rails-dom-testing (1.0.7)
rails-html-sanitizer (1.0.3)
railties (4.2.6)
rake (11.2.2)
rdoc (4.2.2)
representable (2.3.0)
responders (2.2.0)
retriable (2.1.0)
sass (3.4.22)
sass-rails (5.0.4)
sdoc (0.4.1)
signet (0.7.2)
slim (3.0.7)
slim-rails (3.1.0)
spring (1.7.1)
sprockets (3.6.0)
sprockets-rails (3.0.4)
sqlite3 (1.3.11)
temple (0.7.7)
test-unit (3.1.5)
thor (0.19.1)
thread_safe (0.3.5)
tilt (2.0.5)
turbolinks (2.5.3)
tzinfo (1.2.2)
uber (0.0.15)
uglifier (3.0.0)
web-console (2.3.0)

I was using Amazon EC2 with MySQL 5.5.

Maintenance help?

I'm getting good use out of dbhero - contributed rails5 support 5 years back.

If you'd like another person to help deal with issues/PRs etc, I'd be happy to help.

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.