queueclassic / queue_classic_admin Goto Github PK
View Code? Open in Web Editor NEWAn admin interface for QueueClassic
License: MIT License
An admin interface for QueueClassic
License: MIT License
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.
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.
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)
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? :-)
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.
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.
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.
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.
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>'
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.
Not sure what is involved yet, maybe really few things.
Maybe some details will be surfaced as part of QueueClassic/queue_classic#202.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.