Giter VIP home page Giter VIP logo

queue_classic_admin's People

Contributors

abevoelker avatar grodowski avatar jipiboily avatar jraines avatar kruszczynski avatar magni- avatar mnp avatar olleolleolle avatar paul avatar senny avatar smathieu avatar ukd1 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

queue_classic_admin's Issues

ActiveRecord::StatementInvalid when sorting by the "Queue" column

Visit http://localhost:3000/queue_classic_admin/queue_classic_jobs?dir=asc&sort=queue_name to reproduce.

PG::UndefinedColumn: ERROR:  column "queue_name" does not exist
LINE 1: ...assic_jobs".* FROM "queue_classic_jobs"  ORDER BY queue_name...
                                                             ^
: SELECT  "queue_classic_jobs".* FROM "queue_classic_jobs"  ORDER BY queue_name asc NULLS LAST LIMIT 50 OFFSET 0
  Rendered /home/abe/.gem/ruby/2.1.5/gems/queue_classic_admin-0.2.0/app/views/queue_classic_admin/shared/_job_list.html.erb (12.9ms)
  Rendered /home/abe/.gem/ruby/2.1.5/gems/queue_classic_admin-0.2.0/app/views/queue_classic_admin/queue_classic_jobs/index.html.erb within layouts/queue_classic_admin/application (14.3ms)
Completed 500 Internal Server Error in 19ms

I believe it should be looking for the "q_name" column, not "queue_name", right?

Full stacktrace: https://gist.github.com/abevoelker/7ef23b4259cacfbaa1a1

This is with Postgres 9.3.5.

ActiveRecord::StatementInvalid when sorting by the "Arguments" column

Visit http://localhost:3000/queue_classic_admin/queue_classic_jobs?dir=asc&sort=args to reproduce.

PG::UndefinedFunction: ERROR:  could not identify an ordering operator for type json
LINE 1: ...assic_jobs".* FROM "queue_classic_jobs"  ORDER BY args desc ...
                                                             ^
HINT:  Use an explicit ordering operator or modify the query.
: SELECT  "queue_classic_jobs".* FROM "queue_classic_jobs"  ORDER BY args desc NULLS LAST LIMIT 50 OFFSET 0
  Rendered /home/abe/.gem/ruby/2.1.5/gems/queue_classic_admin-0.2.0/app/views/queue_classic_admin/shared/_job_list.html.erb (13.1ms)
  Rendered /home/abe/.gem/ruby/2.1.5/gems/queue_classic_admin-0.2.0/app/views/queue_classic_admin/queue_classic_jobs/index.html.erb within layouts/queue_classic_admin/application (14.5ms)
Completed 500 Internal Server Error in 20ms

Full stacktrace: https://gist.github.com/abevoelker/b00d55553222057bc0bd

This is with Postgres 9.3.5.

Crash when using search feature

Stacktrace (most recent call first):

  active_record/sanitization.rb:171:in `raise_if_bind_arity_mismatch'
    raise PreparedStatementInvalid, "wrong number of bind variables (#{provided} for #{expected}) in: #{statement}"
  active_record/sanitization.rb:127:in `replace_bind_variables'
    raise_if_bind_arity_mismatch(statement, statement.count('?'), values.size)
  active_record/sanitization.rb:116:in `sanitize_sql_array'
    replace_bind_variables(statement, values)
  active_record/sanitization.rb:26:in `sanitize_sql_for_conditions'
    when Array; sanitize_sql_array(condition)
  active_record/relation/query_methods.rb:898:in `build_where'
    [@klass.send(:sanitize_sql, other.empty? ? opts : ([opts] + other))]
  active_record/relation/query_methods.rb:545:in `where!'
    self.where_values += build_where(opts, rest)
  active_record/relation/query_methods.rb:535:in `where'
    spawn.where!(opts, *rest)
  queue_classic_admin/job_common.rb:25:in `search'
    relation.where(sql, *([wildcard_query] * SEARCHABLE_COLUMNS.size))
  active_record/relation/delegation.rb:60:in `block in method_missing'
    scoping { @klass.send(method, *args, &block) }
  active_record/relation.rb:270:in `scoping'
    yield
  active_record/relation/delegation.rb:60:in `method_missing'
    scoping { @klass.send(method, *args, &block) }
  queue_classic_admin/application_controller.rb:11:in `filter_jobs'
    @queue_classic_jobs = @queue_classic_jobs.search(params[:search])
  queue_classic_admin/queue_classic_jobs_controller.rb:7:in `index'
    filter_jobs(QueueClassicJob)
  action_controller/metal/implicit_render.rb:4:in `send_action'
    ret = super
  abstract_controller/base.rb:189:in `process_action'
    send_action(method_name, *args)
  action_controller/metal/rendering.rb:10:in `process_action'
    super
  abstract_controller/callbacks.rb:18:in `block in process_action'
    super
  active_support/callbacks.rb:383:in `_run__3059004509711456340__process_action__callbacks'
    def __callback_runner_name_cache
  active_support/callbacks.rb:80:in `run_callbacks'
    send(runner_name, &block)
  abstract_controller/callbacks.rb:17:in `process_action'
    run_callbacks(:process_action) do
  action_controller/metal/rescue.rb:29:in `process_action'
    super
  action_controller/metal/instrumentation.rb:31:in `block in process_action'
    result = super
  active_support/notifications.rb:159:in `block in instrument'
    instrumenter.instrument(name, payload) { yield payload if block_given? }
  active_support/notifications/instrumenter.rb:20:in `instrument'
    yield payload
  active_support/notifications.rb:159:in `instrument'
    instrumenter.instrument(name, payload) { yield payload if block_given? }
  action_controller/metal/instrumentation.rb:30:in `process_action'
    ActiveSupport::Notifications.instrument("process_action.action_controller", raw_payload) do |payload|
  action_controller/metal/params_wrapper.rb:250:in `process_action'
    super
  active_record/railties/controller_runtime.rb:18:in `process_action'
    super
  abstract_controller/base.rb:136:in `process'
    process_action(action_name, *args)
  abstract_controller/rendering.rb:44:in `process'
    super
  action_controller/metal.rb:195:in `dispatch'
    process(name)
  action_controller/metal/rack_delegation.rb:13:in `dispatch'
    super(action, request)
  action_controller/metal.rb:231:in `block in action'
    new.dispatch(name, klass.new(env))
  action_dispatch/routing/route_set.rb:80:in `call'
    controller.action(action).call(env)
  action_dispatch/routing/route_set.rb:80:in `dispatch'
    controller.action(action).call(env)
  action_dispatch/routing/route_set.rb:48:in `call'
    dispatch(controller, params[:action], env)
  action_dispatch/journey/router.rb:71:in `block in call'
    status, headers, body = route.app.call(env)
  action_dispatch/journey/router.rb:59:in `each'
    find_routes(env).each do |match, parameters, route|
  action_dispatch/journey/router.rb:59:in `call'
    find_routes(env).each do |match, parameters, route|
  action_dispatch/routing/route_set.rb:674:in `call'
    @router.call(env)
  rails/engine.rb:511:in `call'
    app.call(env)
  rails/railtie/configurable.rb:30:in `method_missing'
    instance.send(*args, &block)
  action_dispatch/routing/mapper.rb:44:in `call'
    matches?(env) ? @app.call(env) : [ 404, {'X-Cascade' => 'pass'}, [] ]
  action_dispatch/journey/router.rb:71:in `block in call'
    status, headers, body = route.app.call(env)
  action_dispatch/journey/router.rb:59:in `each'
    find_routes(env).each do |match, parameters, route|
  action_dispatch/journey/router.rb:59:in `call'
    find_routes(env).each do |match, parameters, route|
  action_dispatch/routing/route_set.rb:674:in `call'
    @router.call(env)
  new_relic/rack/error_collector.rb:50:in `call'
    @app.call(env)
  new_relic/rack/agent_hooks.rb:28:in `call'
    result = @app.call(env)
  new_relic/rack/browser_monitoring.rb:23:in `call'
    result = @app.call(env)   # [status, headers, response]
  hirefire/middleware.rb:29:in `call'
    @app.call(env)
  rack/etag.rb:23:in `call'
    status, headers, body = @app.call(env)
  rack/conditionalget.rb:25:in `call'
    status, headers, body = @app.call(env)
  rack/head.rb:11:in `call'
    status, headers, body = @app.call(env)
  action_dispatch/middleware/params_parser.rb:27:in `call'
    @app.call(env)
  action_dispatch/middleware/flash.rb:241:in `call'
    @app.call(env)
  rack/session/abstract/id.rb:225:in `context'
    status, headers, body = app.call(env)
  rack/session/abstract/id.rb:220:in `call'
    context(env)
  action_dispatch/middleware/cookies.rb:486:in `call'
    status, headers, body = @app.call(env)
  active_record/query_cache.rb:36:in `call'
    response = @app.call(env)
  active_record/connection_adapters/abstract/connection_pool.rb:626:in `call'
    response = @app.call(env)
  action_dispatch/middleware/callbacks.rb:29:in `block in call'
    @app.call(env)
  active_support/callbacks.rb:373:in `_run__964893866993724774__call__callbacks'
    RUBY_EVAL
  active_support/callbacks.rb:80:in `run_callbacks'
    send(runner_name, &block)
  action_dispatch/middleware/callbacks.rb:27:in `call'
    result = run_callbacks :call do
  action_dispatch/middleware/remote_ip.rb:76:in `call'
    @app.call(env)
  action_dispatch/middleware/debug_exceptions.rb:17:in `call'
    _, headers, body = response = @app.call(env)
  action_dispatch/middleware/show_exceptions.rb:30:in `call'
    @app.call(env)
  rails/rack/logger.rb:38:in `call_app'
    resp = @app.call(env)
  rails/rack/logger.rb:20:in `block in call'
    logger.tagged(compute_tags(request)) { call_app(request, env) }
  active_support/tagged_logging.rb:68:in `block in tagged'
    formatter.tagged(*tags) { yield self }
  active_support/tagged_logging.rb:26:in `tagged'
    yield self
  active_support/tagged_logging.rb:68:in `tagged'
    formatter.tagged(*tags) { yield self }
  rails/rack/logger.rb:20:in `call'
    logger.tagged(compute_tags(request)) { call_app(request, env) }
  action_dispatch/middleware/request_id.rb:21:in `call'
    @app.call(env).tap { |_status, headers, _body| headers["X-Request-Id"] = env["action_dispatch.request_id"] }
  rack/methodoverride.rb:21:in `call'
    @app.call(env)
  rack/runtime.rb:17:in `call'
    status, headers, body = @app.call(env)
  active_support/cache/strategy/local_cache.rb:83:in `call'
    @app.call(env)
  action_dispatch/middleware/static.rb:64:in `call'
    @app.call(env)
  rack/sendfile.rb:112:in `call'
    status, headers, body = @app.call(env)
  librato/rack.rb:94:in `process_request'
    response = @app.call(env)
  librato/rack.rb:64:in `call'
    response, duration = process_request(env)
  raven/rack.rb:59:in `call'
    response = @app.call(env)
  rails/engine.rb:511:in `call'
    app.call(env)
  rails/application.rb:97:in `call'
    super(env)
  rails/railtie/configurable.rb:30:in `method_missing'
    instance.send(*args, &block)
  unicorn/http_server.rb:580:in `process_client'
    status, headers, body = @app.call(env = @request.read(client))
  unicorn/http_server.rb:660:in `worker_loop'
    process_client(client)
  new_relic/agent/instrumentation/unicorn_instrumentation.rb:22:in `call'
    old_worker_loop.bind(self).call(worker)
  new_relic/agent/instrumentation/unicorn_instrumentation.rb:22:in `block (4 levels) in <top (required)>'
    old_worker_loop.bind(self).call(worker)
  unicorn/http_server.rb:527:in `spawn_missing_workers'
    worker_loop(worker)
  unicorn/http_server.rb:538:in `maintain_worker_count'
    off < 0 and return spawn_missing_workers
  unicorn/http_server.rb:303:in `join'
    maintain_worker_count if respawn
  bundle/ruby/2.1.0/gems/unicorn-4.7.0/bin/unicorn:126:in `<top (required)>'
    Unicorn::HttpServer.new(app, options).start.join
  bundle/ruby/2.1.0/bin/unicorn:23:in `load'
    load Gem.bin_path('unicorn', 'unicorn', version)
  bundle/ruby/2.1.0/bin/unicorn:23:in `<main>'
    load Gem.bin_path('unicorn', 'unicorn', version)

Latest version of Bootstrap supported?

Hi there,

Is the latest version of the Bootstrap (3) gem properly supported? I get an interface that obviously uses bootstrap but the menu and a few buttons are out of wack.

Ideas? :-)

License missing from gemspec

RubyGems.org doesn't report a license for your gem. This is because it is not specified in the gemspec of your last release.

via e.g.

  spec.license = 'MIT'
  # or
  spec.licenses = ['MIT', 'GPL-2']

Including a license in your gemspec is an easy way for rubygems.org and other tools to check how your gem is licensed. As you can imagine, scanning your repository for a LICENSE file or parsing the README, and then attempting to identify the license or licenses is much more difficult and more error prone. So, even for projects that already specify a license, including a license in your gemspec is a good practice. See, for example, how rubygems.org uses the gemspec to display the rails gem license.

There is even a License Finder gem to help companies/individuals ensure all gems they use meet their licensing needs. This tool depends on license information being available in the gemspec. This is an important enough issue that even Bundler now generates gems with a default 'MIT' license.

I hope you'll consider specifying a license in your gemspec. If not, please just close the issue with a nice message. In either case, I'll follow up. Thanks for your time!

Appendix:

If you need help choosing a license (sorry, I haven't checked your readme or looked for a license file), GitHub has created a license picker tool. Code without a license specified defaults to 'All rights reserved'-- denying others all rights to use of the code.
Here's a list of the license names I've found and their frequencies

p.s. In case you're wondering how I found you and why I made this issue, it's because I'm collecting stats on gems (I was originally looking for download data) and decided to collect license metadata,too, and make issues for gemspecs not specifying a license as a public service :). See the previous link or my blog post about this project for more information.

Get ready for queue_classic 3.1 and it's build-in scheduling

This gem is relying on queue_classic 3.0 and if you have queue_classic-later, it will work with it.

What does it do? It's looking at the queue_classic-later table when you click on the "Scheduled Jobs" link at the top. With queue_classic 3.1 though, there is now built-in scheduling similar to what queue_classic-later did. That said, it has a different approach. All jobs are now in the queue_classic_jobs table. There is no table for scheduling anymore. We want to get the queue_classic_admin aligned with that. We want only the job ready to show by default and the "Scheduled Jobs" link should still show jobs that are scheduled for later.

You can get additional context in QueueClassic/queue_classic#217 and QueueClassic/queue_classic#228. Those PR in other queue_classic related project might also help a bit, maybe not either: rainforestapp/queue_classic_plus#4 and rainforestapp/queue_classic_matchers#1.

Custom actions for every job

We currently have the option of adding custom actions to a single job, but it would also be useful to add a custom action for every job in the view.

Our internal use case is to implement a "Retry All" button. The existing "Destroy All" button could be refactored as a default custom action.

Remove building on Circle CI

Or make it visible to public, if that's possible. It would be frustrating for contributors to see a build failed, without access to details.

Duplicate migration when migrating in Rails 3.2.20

Hey,

I'm using the support-v2 branch, creating the migrations for a rails 3.2.20 app.

Creation works fine, but migrating doesnt work:
I dont use the queue-classic-later gem and there are no duplicate migrations with this names.. but i still get this exception:

Any hints?

** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
[deprecated] I18n.enforce_available_locales will default to true in the future. If you really want to skip validation of your locale you can set I18n.enforce_available_locales = false to avoid this message.
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:migrate
rake aborted!
ActiveRecord::DuplicateMigrationNameError: Multiple migrations have the name AddIdToLater
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/activerecord-3.2.20/lib/active_record/migration.rb:637:in `block in migrations'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/activerecord-3.2.20/lib/active_record/migration.rb:629:in `map'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/activerecord-3.2.20/lib/active_record/migration.rb:629:in `migrations'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/activerecord-3.2.20/lib/active_record/migration.rb:734:in `migrations'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/activerecord-3.2.20/lib/active_record/migration.rb:685:in `migrate'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/activerecord-3.2.20/lib/active_record/migration.rb:570:in `up'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/activerecord-3.2.20/lib/active_record/migration.rb:551:in `migrate'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/activerecord-3.2.20/lib/active_record/railties/databases.rake:193:in `block (2 levels) in <top (required)>'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/task.rb:240:in `call'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/task.rb:240:in `block in execute'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/task.rb:235:in `each'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/task.rb:235:in `execute'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/task.rb:179:in `block in invoke_with_call_chain'
/Users/myuser/.rvm/rubies/ruby-2.1.3/lib/ruby/2.1.0/monitor.rb:211:in `mon_synchronize'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/task.rb:172:in `invoke_with_call_chain'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/task.rb:165:in `invoke'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/application.rb:150:in `invoke_task'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/application.rb:106:in `block (2 levels) in top_level'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/application.rb:106:in `each'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/application.rb:106:in `block in top_level'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/application.rb:115:in `run_with_threads'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/application.rb:100:in `top_level'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/application.rb:78:in `block in run'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/application.rb:176:in `standard_exception_handling'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/lib/rake/application.rb:75:in `run'
/Users/myuser/.rvm/gems/ruby-2.1.3/gems/rake-10.3.2/bin/rake:33:in `<top (required)>'
/Users/myuser/.rvm/gems/ruby-2.1.3/bin/rake:23:in `load'
/Users/myuser/.rvm/gems/ruby-2.1.3/bin/rake:23:in `<main>'
/Users/myuser/.rvm/gems/ruby-2.1.3/bin/ruby_executable_hooks:15:in `eval'
/Users/myuser/.rvm/gems/ruby-2.1.3/bin/ruby_executable_hooks:15:in `<main>'

Is there a way to make the Twitter Bootstrap requirement less opinionated?

I'm not super familiar with Rails engines, but I'm already using the bootstrap-sass gem in my main Rails application, which is the official Twitter Bootstrap Sass gem. It makes me slightly nervous to have multiple bootstrap gems in the same project, although I suppose if this one's well-behaved, it won't matter if I just avoid requiring it in the main application asset pipeline manifest files.

But it would be cool if queue_classic_admin could either let me leverage my existing Bootstrap usage, or maybe vendor the Bootstrap source files directly and thus not leak into my application's gems/Gemfile.lock.

I'm probably just being overly paranoid, in which case you can just close this issue. But I guess I've encountered gems like rails_admin which went a bit crazy with the view-related gems, and which locked me into dependency hell. Just food for thought I guess.

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.