I am trying to find a project from Project model using Project.find(id) but it is giving me ActiveRecord::StatementInvalid error
Full trace-
PG::Error: ERROR: prepared statement "a1" already exists : SELECT COUNT(*) FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind in ('v','r') AND c.relname = $1 AND n.nspname = ANY (current_schemas(false))
/home/deploy/.rvm/gems/ruby-1.9.2-p290#submit_contactpl/gems/activerecord-3.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:1180:in `prepare'
/home/deploy/.rvm/gems/ruby-1.9.2-p290#submit_contactpl/gems/activerecord-3.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:1180:in `prepare_statement'
/home/deploy/.rvm/gems/ruby-1.9.2-p290#submit_contactpl/gems/activerecord-3.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:1144:in `exec_cache'
/home/deploy/.rvm/gems/ruby-1.9.2-p290#submit_contactpl/gems/activerecord- 3.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:664:in `block in exec_query'
/home/deploy/.rvm/gems/ruby-1.9.2-p290#submit_contactpl/gems/activerecord-3.2.2/lib/active_record/connection_adapters/abstract_adapter.rb:280:in `block in log'
/home/deploy/.rvm/gems/ruby-1.9.2-p290#submit_contactpl/gems/activesupport-3.2.2/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/home/deploy/.rvm/gems/ruby-1.9.2-p290#submit_contactpl/gems/activerecord-3.2.2/lib/active_record/connection_adapters/abstract_adapter.rb:275:in `log'
/home/deploy/.rvm/gems/ruby-1.9.2-p290#submit_contactpl/gems/activerecord-3.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:662:in `exec_query'
/home/deploy/.rvm/gems/ruby-1.9.2-p290#submit_contactpl/gems/activerecord-3.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:797:in `table_exists?'
/home/deploy/.rvm/gems/ruby-1.9.2-p290#submit_contactpl/gems/activerecord-3.2.2/lib/active_record/connection_adapters/schema_cache.rb:30:in `table_exists?'
/home/deploy/.rvm/gems/ruby-1.9.2-p290#submit_contactpl/gems/activerecord-3.2.2/lib/active_record/model_schema.rb:223:in `table_exists?'
/home/deploy/.rvm/gems/ruby-1.9.2-p290#submit_contactpl/gems/activerecord-3.2.2/lib/active_record/attribute_methods/primary_key.rb:75:in `get_primary_key'
/home/deploy/.rvm/gems/ruby-1.9.2-p290#submit_contactpl/gems/activerecord-3.2.2/lib/active_record/attribute_methods/primary_key.rb:60:in `reset_primary_key'
/home/deploy/.rvm/gems/ruby-1.9.2-p290#submit_contactpl/gems/activerecord-3.2.2/lib/active_record/attribute_methods/primary_key.rb:49:in `primary_key'
/home/deploy/.rvm/gems/ruby-1.9.2-p290#submit_contactpl/gems/activerecord-3.2.2/lib/active_record/model_schema.rb:230:in `block in columns'
/home/deploy/.rvm/gems/ruby-1.9.2-p290#submit_contactpl/gems/activerecord-3.2.2/lib/active_record/model_schema.rb:228:in `map'
/home/deploy/.rvm/gems/ruby-1.9.2-p290#submit_contactpl/gems/activerecord-3.2.2/lib/active_record/model_schema.rb:228:in `columns'
/home/deploy/.rvm/gems/ruby-1.9.2-p290#submit_contactpl/gems/activerecord-3.2.2/lib/active_record/model_schema.rb:237:in `columns_hash'
/home/deploy/.rvm/gems/ruby-1.9.2-p290#submit_contactpl/gems/activerecord-3.2.2/lib/active_record/relation/delegation.rb:7:in `columns_hash'
/home/deploy/.rvm/gems/ruby-1.9.2-p290#submit_contactpl/gems/activerecord-3.2.2/lib/active_record/relation/finder_methods.rb:330:in `find_one'
/home/deploy/.rvm/gems/ruby-1.9.2-p290#submit_contactpl/gems/activerecord-3.2.2/lib/active_record/relation/finder_methods.rb:311:in `find_with_ids'
/home/deploy/.rvm/gems/ruby-1.9.2-p290#submit_contactpl/gems/activerecord-3.2.2/lib/active_record/relation/finder_methods.rb:107:in `find'
/home/deploy/.rvm/gems/ruby-1.9.2-p290#submit_contactpl/gems/activerecord-3.2.2/lib/active_record/querying.rb:5:in `find'
/home/deploy/submit_contactpl/app/workers/php_worker.rb:5:in `perform'
Line 5 of php_worker is
project = Project.find(project_id)
What might be the issue? Could you shade some light on it. What might be the possible solution
all it needed was
task "resque:setup" => :environment do
#ENV['QUEUE'] = '*'
Resque.before_fork = Proc.new { ActiveRecord::Base.establish_connection }
end
in your resque.rake file
It's a bug somewhere in your Ruby stack.
It's trying to prepare a statement called "a1" which is examining table/view definitions (presumably for your "project" table). It finds out a prepared statement with the same name already exists and spits out an error. The query it is trying to prepare is fine - it returns a count of how many tables have a given name.
Either it's not tracking its prepared statements properly or it thinks it's deleted one and hasn't really. I'd update rails & activerecord and check for bug reports.
Related
i use the command -> shopify theme serve then appears this error:
X An unexpected error occured.
To submit an issue include the stack trace.
? Send an anonymized error report to Shopify? (You chose: No, don't send)
C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/lib/shopify_cli/theme/file.rb:137:in []=': no implicit conversion of String into Integer (TypeError) from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/lib/shopify_cli/theme/file.rb:137:in visit_value'
from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/lib/shopify_cli/theme/file.rb:130:in block in visit_hash' from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/lib/shopify_cli/theme/file.rb:129:in each'
from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/lib/shopify_cli/theme/file.rb:129:in visit_hash' from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/lib/shopify_cli/theme/file.rb:124:in visit_document'
from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/lib/shopify_cli/theme/file.rb:113:in normalize_json' from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/lib/shopify_cli/theme/file.rb:81:in checksum'
from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/lib/shopify_cli/theme/syncer/checksums.rb:20:in file_has_changed?' from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/lib/shopify_cli/theme/syncer/json_update_handler.rb:19:in block in enqueue_json_updates'
from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/lib/shopify_cli/theme/syncer/json_update_handler.rb:19:in select' from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/lib/shopify_cli/theme/syncer/json_update_handler.rb:19:in enqueue_json_updates'
from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/lib/shopify_cli/theme/syncer.rb:173:in upload_theme!' from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/lib/project_types/theme/ui/sync_progress_bar.rb:11:in public_send'
from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/lib/project_types/theme/ui/sync_progress_bar.rb:11:in block in progress' from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/vendor/deps/cli-ui/lib/cli/ui/progress.rb:34:in progress'
from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/lib/project_types/theme/ui/sync_progress_bar.rb:10:in progress' from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/lib/project_types/theme/commands/serve.rb:31:in block in call'
from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/lib/shopify_cli/theme/dev_server.rb:56:in block in start' from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/vendor/deps/cli-ui/lib/cli/ui/frame.rb:103:in open'
from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/lib/shopify_cli/theme/dev_server.rb:52:in start' from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/lib/project_types/theme/commands/serve.rb:30:in call'
from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/lib/shopify_cli/command/sub_command.rb:16:in call' from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/lib/shopify_cli/command.rb:27:in call'
from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/lib/shopify_cli/core/executor.rb:17:in block (2 levels) in call' from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/vendor/deps/cli-kit/lib/cli/kit/executor.rb:37:in block (2 levels) in with_logging'
from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/vendor/deps/cli-ui/lib/cli/ui/stdout_router.rb:169:in with_id' from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/vendor/deps/cli-kit/lib/cli/kit/executor.rb:36:in block in with_logging'
from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/vendor/deps/cli-ui/lib/cli/ui.rb:176:in log_output_to' from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/vendor/deps/cli-kit/lib/cli/kit/executor.rb:35:in with_logging'
from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/lib/shopify_cli/core/executor.rb:16:in block in call' from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/vendor/deps/cli-kit/lib/cli/kit/executor.rb:45:in block (2 levels) in with_traps'
from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/vendor/deps/cli-kit/lib/cli/kit/executor.rb:51:in twrap' from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/vendor/deps/cli-kit/lib/cli/kit/executor.rb:44:in block in with_traps'
from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/vendor/deps/cli-kit/lib/cli/kit/executor.rb:51:in twrap' from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/vendor/deps/cli-kit/lib/cli/kit/executor.rb:43:in with_traps'
from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/lib/shopify_cli/core/executor.rb:15:in call' from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/lib/shopify_cli/core/entry_point.rb:24:in block in call'
from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/lib/shopify_cli/core/monorail.rb:26:in log' from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/lib/shopify_cli/core/entry_point.rb:23:in call'
from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/bin/shopify:50:in block (2 levels) in <top (required)>' from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/vendor/deps/cli-kit/lib/cli/kit/error_handler.rb:75:in handle_abort'
from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/vendor/deps/cli-kit/lib/cli/kit/error_handler.rb:21:in call' from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/bin/shopify:49:in block in <top (required)>'
from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/shopify-cli-2.18.1/bin/shopify:59:in <top (required)>' from C:/Ruby31-x64/bin/shopify:32:in load'
from C:/Ruby31-x64/bin/shopify:32:in `'
Hey before running the command make sure you check these:
You are in the theme root folder.
You are logged in using shopify login and you have the right to edit themes.
You are connected to your internet.
If all of these are checked you might wanna reduce the Shopify version to a lower version like 2.5.0, or submit a bug in Shopify CLI in Github here: https://github.com/Shopify/shopify-cli/issues
i have simple background job that runs using resque-pool which makes certain socksproxy call. This works fine when i start the resque-pool in Rails development mode as soon as i change to production mode i hit connection timeout with background job
The same code works when executed in
Rails Console in Production mode
Standalone ruby script invoked from command line
calls are something like:
req = Net::HTTP::Get.new(uri.request_uri)
response = Net::HTTP.SOCKSProxy(#socks_server, #socks_port).start(uri.host, uri.port) do |http|
http.request(req)
end
Investigation:
when this call happens in net/http.rb
TCPSocket.open(conn_address, conn_port, #local_host, #local_port)
i found that in production mode worker child process instead of loading
TCPSocket class from socksify-1.7.0/lib/socksify.rb it is still loading from ruby provided resolv-replace.rb. Not sure why though.
Error i see:
Connection timed out - connect(2) for "" port 6455:
/usr/lib/ruby/gems/2.1.0/gems/socksify-1.7.0/lib/socksify.rb:178:in
initialize'
/usr/lib/ruby/gems/2.1.0/gems/socksify-1.7.0/lib/socksify.rb:178:in
initialize' /usr/lib/ruby/2.1.0/resolv-replace.rb:23:in initialize'
/usr/lib/ruby/2.1.0/net/http.rb:879:inopen'
/usr/lib/ruby/2.1.0/net/http.rb:879:in block in connect'
/usr/lib/ruby/2.1.0/timeout.rb:76:intimeout'
/usr/lib/ruby/2.1.0/net/http.rb:878:in connect'
/usr/lib/ruby/2.1.0/net/http.rb:863:indo_start'
/usr/lib/ruby/2.1.0/net/http.rb:852:in start'
/usr/lib/ruby/2.1.0/net/http.rb:583:instart'
/usr/lib/ruby/gems/2.1.0/gems/retries-0.0.5/lib/retries.rb:46:in
call'
/usr/lib/ruby/gems/2.1.0/gems/retries-0.0.5/lib/retries.rb:46:in
with_retries'
/usr/lib/ruby/gems/2.1.0/gems/resque-1.26.0/lib/resque/job.rb:177:in
block (3 levels) in perform'
/usr/lib/ruby/gems/2.1.0/gems/newrelic_rpm-3.16.2.321/lib/new_relic/agent/instrumentation/resque.rb:41:in
block in around_perform_with_monitoring'
/usr/lib/ruby/gems/2.1.0/gems/newrelic_rpm-3.16.2.321/lib/new_relic/agent/instrumentation/controller_instrumentation.rb:363:in
`perform_action_with_newrelic_trace'
/usr/lib/ruby/gems/2.1.0/gems/newrelic_rpm-3.16.2.321/lib/new_relic/agent/instrumentation/resque.rb:33:in
around_perform_with_monitoring'
/usr/lib/ruby/gems/2.1.0/gems/resque-1.26.0/lib/resque/job.rb:176:in
block (2 levels) in perform'
/usr/lib/ruby/gems/2.1.0/gems/resque-1.26.0/lib/resque/job.rb:172:in
call'
/usr/lib/ruby/gems/2.1.0/gems/resque-1.26.0/lib/resque/job.rb:172:in
block (3 levels) in perform' ../app/jobs/resque_hooks.rb:15:in
around_perform_job_duration'
/usr/lib/ruby/gems/2.1.0/gems/resque-1.26.0/lib/resque/job.rb:172:in
block (2 levels) in perform'
/usr/lib/ruby/gems/2.1.0/gems/resque-1.26.0/lib/resque/job.rb:184:in
call'
/usr/lib/ruby/gems/2.1.0/gems/resque-1.26.0/lib/resque/job.rb:184:in
perform'
/usr/lib/ruby/gems/2.1.0/gems/resque-1.26.0/lib/resque/worker.rb:290:in
perform'
/usr/lib/ruby/gems/2.1.0/gems/resque-1.26.0/lib/resque/worker.rb:229:in
block in work'
/usr/lib/ruby/gems/2.1.0/gems/resque-1.26.0/lib/resque/worker.rb:206:in
loop'
/usr/lib/ruby/gems/2.1.0/gems/resque-1.26.0/lib/resque/worker.rb:206:in
work'
/usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6.0/lib/resque/pool.rb:396:in
block in spawn_worker!'
/usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6.0/lib/resque/pool.rb:389:in
fork'
/usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6.0/lib/resque/pool.rb:389:in
spawn_worker!'
/usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6.0/lib/resque/pool.rb:367:in
block in spawn_missing_workers_for'
/usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6.0/lib/resque/pool.rb:366:in
times'
/usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6.0/lib/resque/pool.rb:366:in
spawn_missing_workers_for'
/usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6.0/lib/resque/pool.rb:352:in
block in maintain_worker_count'
/usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6.0/lib/resque/pool.rb:350:in
each'
/usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6.0/lib/resque/pool.rb:350:in
maintain_worker_count'
/usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6.0/lib/resque/pool.rb:263:in
start'
/usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6.0/lib/resque/pool.rb:89:in
run'
/usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6.0/lib/resque/pool/tasks.rb:17:in
block (2 levels) in '
/usr/lib/ruby/gems/2.1.0/gems/rake-11.2.2/lib/rake/task.rb:248:in
call'
/usr/lib/ruby/gems/2.1.0/gems/rake-11.2.2/lib/rake/task.rb:248:in
block in execute'
/usr/lib/ruby/gems/2.1.0/gems/rake-11.2.2/lib/rake/task.rb:243:in
each'
/usr/lib/ruby/gems/2.1.0/gems/rake-11.2.2/lib/rake/task.rb:243:in
execute'
/usr/lib/ruby/gems/2.1.0/gems/airbrake-5.5.0/lib/airbrake/rake/task_ext.rb:19:in
execute'
/usr/lib/ruby/gems/2.1.0/gems/rake-11.2.2/lib/rake/task.rb:187:in
block in invoke_with_call_chain'
/usr/lib/ruby/2.1.0/monitor.rb:211:in mon_synchronize'
/usr/lib/ruby/gems/2.1.0/gems/rake-11.2.2/lib/rake/task.rb:180:in
invoke_with_call_chain
After more investigation it turns due to newrelic gem enabled in production mode. newrelic requires resolv-replace this didnt go well with socksify gem and resque background job. As i did not need new relic anymore, simply by disabling it i was able to overcome this issue.
I have setup an couchdb database to be used with a ruby on rails application using couchrest.
Now the database has around 100K records and I want to add a field to store timestamp in integer format.
Trying to update it in a loop through causes request time out.
What is the best way to add a new field/property to the couchdb ?
Code
pages = Page.all
pages.each do |p|
p.update_attributes(:created_at_to_i => p.created_at.to_i)
puts p.created_at_to_i.inspect
end
Trace
>> Page.update_timestamp
RestClient::RequestTimeout: Request Timeout
from /usr/local/lib/ruby/gems/1.8/gems/rest-client-1.6.7/lib/restclient/request.rb:184:in `transmit'
from /usr/local/lib/ruby/gems/1.8/gems/rest-client-1.6.7/lib/restclient/request.rb:64:in `execute'
from /usr/local/lib/ruby/gems/1.8/gems/rest-client-1.6.7/lib/restclient/request.rb:33:in `execute'
from /usr/local/lib/ruby/gems/1.8/gems/couchrest-1.1.2/lib/couchrest/rest_api.rb:89:in `execute'
from /usr/local/lib/ruby/gems/1.8/gems/couchrest-1.1.2/lib/couchrest/rest_api.rb:45:in `get'
from /usr/local/lib/ruby/gems/1.8/gems/couchrest-1.1.2/lib/couchrest/database.rb:260:in `view'
from /usr/local/lib/ruby/gems/1.8/gems/couchrest-1.1.2/lib/couchrest/design.rb:52:in `view_on'
from /usr/local/lib/ruby/gems/1.8/gems/couchrest_model-1.1.2/lib/couchrest/model/views.rb:142:in `fetch_view'
from /usr/local/lib/ruby/gems/1.8/gems/couchrest_model-1.1.2/lib/couchrest/model/views.rb:135:in `fetch_view_with_docs'
from /usr/local/lib/ruby/gems/1.8/gems/couchrest_model-1.1.2/lib/couchrest/model/views.rb:104:in `view'
from /usr/local/lib/ruby/gems/1.8/gems/couchrest_model-1.1.2/lib/couchrest/model/document_queries.rb:12:in `all'
from /var/www/monitoring_couch/app/models/page.rb:309:in `update_timestamp'
from (irb):2
To add a new property you need to load each document, modify it, and save it back to the database. You could do it using the bulk update api, but for just 100k I would think it's not worth the extra hassle.
Please post your update script and the traceback you get when the timeout occurs.
In my cucumber.yml I've tried to add this option (default: --drb --format progress), but it return an error :
Exception encountered: #<ArgumentError: wrong number of arguments (3 for 2)
Error creating formatter: progress>
When I take it in brackets default: --drb --"format progress" it doesn't helps:
invalid option: --format progress (OptionParser::InvalidOption)
So maybe there is no option, but it should be
And "format pretty" works correctly without any brackets.
I want see not all scenarios in console, but just which has an errors, perhaps there is another way to do this.
Full trace:
wrong number of arguments (3 for 2)
Error creating formatter: progress (ArgumentError)
/home/alder/.rvm/gems/ruby-1.9.2-p290#global/gems/activerecord-3.1.0/lib/active_record/base.rb:1543:in `initialize'
/home/alder/.rvm/gems/ruby-1.9.2-p290#global/gems/cucumber-1.1.0/lib/cucumber/cli/configuration.rb:168:in `new'
/home/alder/.rvm/gems/ruby-1.9.2-p290#global/gems/cucumber-1.1.0/lib/cucumber/cli/configuration.rb:168:in `block in formatters'
/home/alder/.rvm/gems/ruby-1.9.2-p290#global/gems/cucumber-1.1.0/lib/cucumber/cli/configuration.rb:163:in `map'
/home/alder/.rvm/gems/ruby-1.9.2-p290#global/gems/cucumber-1.1.0/lib/cucumber/cli/configuration.rb:163:in `formatters'
/home/alder/.rvm/gems/ruby-1.9.2-p290#global/gems/cucumber-1.1.0/lib/cucumber/cli/configuration.rb:68:in `build_tree_walker'
/home/alder/.rvm/gems/ruby-1.9.2-p290#global/gems/cucumber-1.1.0/lib/cucumber/runtime.rb:42:in `run!'
/home/alder/.rvm/gems/ruby-1.9.2-p290#global/gems/cucumber-1.1.0/lib/cucumber/cli/main.rb:43:in `execute!'
/home/alder/.rvm/gems/ruby-1.9.2-p290#global/gems/cucumber-1.1.0/lib/cucumber/cli/main.rb:20:in `execute'
/home/alder/.rvm/gems/ruby-1.9.2-p290#global/gems/cucumber-1.1.0/bin/cucumber:14:in `<top (required)>'
/home/alder/.rvm/gems/ruby-1.9.2-p290#global/bin/cucumber:19:in `load'
/home/alder/.rvm/gems/ruby-1.9.2-p290#global/bin/cucumber:19:in `<main>'
And If I write option in cucumer.yml the error slightly different:
Exception encountered: #<ArgumentError: wrong number of arguments (3 for 2)
Error creating formatter: progress>
backtrace:
/home/alder/.rvm/gems/ruby-1.9.2-p290#global/gems/activerecord-3.1.0/lib/active_record/base.rb:1543:in `initialize'
/home/alder/.rvm/gems/ruby-1.9.2-p290#global/gems/cucumber-1.1.0/lib/cucumber/cli/configuration.rb:168:in `new'
/home/alder/.rvm/gems/ruby-1.9.2-p290#global/gems/cucumber-1.1.0/lib/cucumber/cli/configuration.rb:168:in `block in formatters'
/home/alder/.rvm/gems/ruby-1.9.2-p290#global/gems/cucumber-1.1.0/lib/cucumber/cli/configuration.rb:163:in `map'
/home/alder/.rvm/gems/ruby-1.9.2-p290#global/gems/cucumber-1.1.0/lib/cucumber/cli/configuration.rb:163:in `formatters'
/home/alder/.rvm/gems/ruby-1.9.2-p290#global/gems/cucumber-1.1.0/lib/cucumber/cli/configuration.rb:68:in `build_tree_walker'
/home/alder/.rvm/gems/ruby-1.9.2-p290#global/gems/cucumber-1.1.0/lib/cucumber/runtime.rb:42:in `run!'
/home/alder/.rvm/gems/ruby-1.9.2-p290#global/gems/cucumber-1.1.0/lib/cucumber/cli/main.rb:43:in `execute!'
/home/alder/.rvm/gems/ruby-1.9.2-p290#global/gems/spork-0.9.0.rc9/lib/spork/test_framework/cucumber.rb:24:in `run_tests'
/home/alder/.rvm/gems/ruby-1.9.2-p290#global/gems/spork-0.9.0.rc9/lib/spork/run_strategy/forking.rb:13:in `block in run'
/home/alder/.rvm/gems/ruby-1.9.2-p290#global/gems/spork-0.9.0.rc9/lib/spork/forker.rb:21:in `block in initialize'
/home/alder/.rvm/gems/ruby-1.9.2-p290#global/gems/spork-0.9.0.rc9/lib/spork/forker.rb:18:in `fork'
/home/alder/.rvm/gems/ruby-1.9.2-p290#global/gems/spork-0.9.0.rc9/lib/spork/forker.rb:18:in `initialize'
/home/alder/.rvm/gems/ruby-1.9.2-p290#global/gems/spork-0.9.0.rc9/lib/spork/run_strategy/forking.rb:9:in `new'
/home/alder/.rvm/gems/ruby-1.9.2-p290#global/gems/spork-0.9.0.rc9/lib/spork/run_strategy/forking.rb:9:in `run'
/home/alder/.rvm/gems/ruby-1.9.2-p290#global/gems/spork-0.9.0.rc9/lib/spork/server.rb:48:in `run'
/home/alder/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/drb/drb.rb:1558:in `perform_without_block'
/home/alder/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/drb/drb.rb:1518:in `perform'
/home/alder/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/drb/drb.rb:1592:in `block (2 levels) in main_loop'
/home/alder/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/drb/drb.rb:1588:in `loop'
/home/alder/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/drb/drb.rb:1588:in `block in main_loop'
I have a Spork by the way maybe it's a problem.
Based on the updated information in your question, I think I see the problem (hence I'm posting another answer as it's completely different to my other one). It looks like Cucumber is trying to instantiate an ActiveRecord class, so I suspect you have a model named 'Progress' in your project somewhere, which Cucumber is trying to create instead of of the actual formatter.
I was able to reproduce your problem (close enough, anyway) by adding this class in the 'support' folder:
class Progress
def initialize
raise "I don't exist!"
end
end
According to the docs, you should be able to specify a fully qualified class name here i.e. --format Cucumber::Formatter::Progress, to force Cucumber to use it's own formatter. However, I tried this and it still doesn't work, there seems to be a bug in how Cucumber resolves the fully-qualified name.
I was able to get around this by adding this line to my env.rb file:
require 'cucumber/formatter/progress'
Which then allowed me to run cucumber --format progress successfully.
I think that, as env.rb gets executed before any other code, then Cucumber's Progress class will be the first one that gets found when creating the formatter.
It looks from the output you've pasted in, that you have an extra angle ('>') bracket floating around in your cucumber.yml file:
Error creating formatter: progress>
Unless that's a typo in your question, for some reason Cucumber is trying to create a formatter named 'progress>', so you probably just need to find and remove the extra angle bracket.
Edit: This wasn't the problem at all, see my other answer
I am currently writing a rails app using bleeding edge stuff. Rails3, rSpec2, Ruby 1.9.2 and Geokit 1.5.0. When i try to geocode addresses that have special characters that are not in ASCII-8Bit i get this error:
incompatible character encodings:
UTF-8 and ASCII-8BIT
The Trace is like this:
1) Spot Basic Validations should calculate lat and lng
Failure/Error: spot = Spot.create!({
incompatible character encodings: UTF-8 and ASCII-8BIT
# /Users/nilsriedemann/.rvm/gems/ruby-1.9.2-rc2/gems/geokit-1.5.0/lib/geokit/geocoders.rb:435:in `do_geocode'
# /Users/nilsriedemann/.rvm/gems/ruby-1.9.2-rc2/gems/geokit-1.5.0/lib/geokit/geocoders.rb:126:in `geocode'
# ./app/models/spot.rb:26:in `geocode_address'
# /Users/nilsriedemann/.rvm/gems/ruby-1.9.2-rc2/gems/activesupport-3.0.0.rc/lib/active_support/callbacks.rb:409:in `_run_validation_callbacks'
# /Users/nilsriedemann/.rvm/gems/ruby-1.9.2-rc2/gems/activemodel-3.0.0.rc/lib/active_model/validations/callbacks.rb:53:in `run_validations!'
# /Users/nilsriedemann/.rvm/gems/ruby-1.9.2-rc2/gems/activemodel-3.0.0.rc/lib/active_model/validations.rb:168:in `valid?'
# /Users/nilsriedemann/.rvm/gems/ruby-1.9.2-rc2/gems/activerecord-3.0.0.rc/lib/active_record/validations.rb:55:in `valid?'
# /Users/nilsriedemann/.rvm/gems/ruby-1.9.2-rc2/gems/activerecord-3.0.0.rc/lib/active_record/validations.rb:75:in `perform_validations'
# /Users/nilsriedemann/.rvm/gems/ruby-1.9.2-rc2/gems/activerecord-3.0.0.rc/lib/active_record/validations.rb:49:in `save!'
# /Users/nilsriedemann/.rvm/gems/ruby-1.9.2-rc2/gems/activerecord-3.0.0.rc/lib/active_record/attribute_methods/dirty.rb:30:in `save!'
# /Users/nilsriedemann/.rvm/gems/ruby-1.9.2-rc2/gems/activerecord-3.0.0.rc/lib/active_record/transactions.rb:242:in `block in save!'
# /Users/nilsriedemann/.rvm/gems/ruby-1.9.2-rc2/gems/activerecord-3.0.0.rc/lib/active_record/transactions.rb:289:in `block in with_transaction_returning_status'
# /Users/nilsriedemann/.rvm/gems/ruby-1.9.2-rc2/gems/activerecord-3.0.0.rc/lib/active_record/connection_adapters/abstract/database_statements.rb:139:in `transaction'
# /Users/nilsriedemann/.rvm/gems/ruby-1.9.2-rc2/gems/activerecord-3.0.0.rc/lib/active_record/transactions.rb:204:in `transaction'
# /Users/nilsriedemann/.rvm/gems/ruby-1.9.2-rc2/gems/activerecord-3.0.0.rc/lib/active_record/transactions.rb:287:in `with_transaction_returning_status'
# /Users/nilsriedemann/.rvm/gems/ruby-1.9.2-rc2/gems/activerecord-3.0.0.rc/lib/active_record/transactions.rb:242:in `save!'
# /Users/nilsriedemann/.rvm/gems/ruby-1.9.2-rc2/gems/activerecord-3.0.0.rc/lib/active_record/validations.rb:34:in `create!'
# ./spec/models/spot_spec.rb:13:in `block (2 levels) in <top (required)>'
I used # coding: utf-8 in all of my related files (specs, factories and model). Yet i get this error when i use an address like "Elsassers Straße 27".
Any hints? I thought Geokit was already compatible with 1.9.1 and therefore with all this new encoding thing.
Using CGI.escape is not a good idea, as it gives unexpected results. Try "Oslo, Norway" with and without CGI.escape, you'll see what I mean.
A better solution is to use Iconv on the location:
ic = Iconv.new('US-ASCII//IGNORE', 'UTF-8')
utf8location = ic.iconv(location)
Cheers!
EDIT: I had a suggestion by Wes Gamble for a edit here, which I think is relevant:
Using //IGNORE will remove any non-ASCII characters. But in many (most) cases, you may want to transliterate certain characters such as umlauts (e.g. "Zürich" will become "Zurich") or carons (e.g "Niš" will become "Nis") in order to successfully geocode them. If you ignore non-ASCII characters, then "Zürich" will become "Zrich" and "Niš" will become "Ni", neither of which will successfully geocode.
For this you want to use
ic = Iconv.new('US-ASCII//TRANSLIT', 'UTF-8')
Note that the conversion will throw an exception if the transliteration cannot be completed so make sure you handle that.
CGI.escape seems to be more accurate than Geokit::Inflector::url_escape.
Here are the results of encoding "Elsassers Straße 27"
>> CGI.escape(address)
=> "Elsassers+Stra%C3%9Fe+27"
While
>> Geokit::Inflector::url_escape(address)
=> "Elsassers+Stra%C3e+27"
The letter ß should show as c39F (as per http://www.utf8-chartable.de/unicode-utf8-table.pl)
In addition, debug statement was blowing up (I knew there was a reason to check if debug logging is enabled :)
So, here is my solution for GoogleGeocoder3, I guess others will have a similar problem
module Geokit
module Geocoders
class GoogleGeocoder3 < Geocoder
def self.do_geocode(address, options = {})
bias_str = options[:bias] ? construct_bias_string_from_options(options[:bias]) : ''
address_str = address.is_a?(GeoLoc) ? address.to_geocodeable_s : address
#use CGI.escape instead of Geokit::Inflector::url_escape
url ="http://maps.google.com/maps/api/geocode/json?sensor=false&address=#{CGI.escape(address_str)}#{bias_str}"
res = self.call_geocoder_service(url)
return GeoLoc.new if !res.is_a?(Net::HTTPSuccess)
json = res.body
# escape results of json
logger.debug "Google geocoding. Address: #{address}. Result: #{CGI.escape(json)}"
return self.json2GeoLoc(json, address)
end
end
end
end
Are you using Postgres and pg gem v0.8? Upgrade to 0.9
I know it a very very late answer, but I have written a Google geocoder for the Geokit gem that handles all of this Incompatibility errors. This Geocoder uses the newest V3 API of Google's geocoding service. The advantage is that now it does not parse XML but rather JSON which is faster, paired with the required gem Yajl (a super fast json parser for ruby) is way faster. My benchmarks show about 1.5x times faster than the old way.
https://github.com/rubymaniac/geokit-gem
I had the same problem and I solved this by adding CGI.escape() like this:
geo = Geokit::Geocoders::MultiGeocoder.geocode(CGI.escape(address))