<< | Index | >>
There are still broken Sequence
objects.
These Objects caused errors on Jobs.
Swissmedic-followers
/var/www/oddb.org/log/job.pid is deleted (druby://localhost:10005) /usr/local/lib/ruby/gems/1.9.1/gems/odba-1.0.8/lib/odba/stub.rb:112:in `method_missing': undefined method `active?' for []:Array (NoMethodError) from (druby://localhost:10005) /var/www/oddb.org/src/model/package.rb:413:in `public?' from (druby://localhost:10005) /usr/local/lib/ruby/gems/1.9.1/gems/odba-1.0.8/lib/odba/stub.rb:112:in `method_missing' from (druby://localhost:10005) /var/www/oddb.org/ext/export/src/generics_xls.rb:96:in `block in export_generics' from (druby://localhost:10005) /var/www/oddb.org/src/model/sequence.rb:174:in `each' from (druby://localhost:10005) /var/www/oddb.org/src/model/sequence.rb:174:in `each_package' from (druby://localhost:10005)
rebuild_indices
DBI::ProgrammingError ERROR: text search configuration "default_french" does not exist NoMethodError undefined method `active?' for []:Array /var/ch.oddb.org/src/util/oddbapp.rb:1324:in `instance_eval' /var/ch.oddb.org/src/model/sequence.rb:64:in `active_packages'
ch.oddb> active_packages.length -> undefined method `active?' for []:Array
src/util/oddbapp.rb
def active_packages @registrations.inject([]) { |pacs, (iksnr,reg)| pacs.concat(reg.active_packages) } end
src/model/registration.rb
def active_packages if active? @sequences.values.inject([]) do |memo, seq| memo.concat seq.active_packages end else [] end end
@src/model/sequence.rb
def active_packages if(active?) @packages.values.select { |pac| pac.active? } else [] end end ... def active? (!@inactive_date || (@inactive_date > @@two_years_ago)) \ && @registration && @registration.active? && !violates_patent? end
This Sequence
ch.oddb> sequences.length -> 16148 ch.oddb> sequences.select{|seq| !seq.registration.is_a?(ODDB::Registration) }.length #=> sequence -> 1 ch.oddb> self.registrations.values.select{|reg| !reg.sequences.values.select{|seq| seq.odba_id == 73813 }.empty? }.length #=> registration -> 1 # repair ch.oddb> sequences.select{|seq| !seq.registration.is_a?(ODDB::Registration) }.first.registration = self.registrations.values.select{|reg| !reg.sequences.values.select{|seq| seq.odba_id == 73813 }.empty? }.first -> #<ODDB::Registration:0x0000000b0093e8> ch.oddb> ODBA.cache.fetch(73813).registration -> #<ODDB::Registration:0x0000000b0093e8> ch.oddb> ODBA.cache.fetch(73813).odba_store ch.oddb> active_packages.length -> 17999
Then update to prevent this error.
DBI::ProgrammingError ERROR: text search configuration "default_german" does not exist /path/to/ruby/1.9.1/gems/dbd-pg-0.3.9/lib/dbd/pg/statement.rb:62:in `rescue in execute' /path/to/ruby/1.9.1/gems/dbd-pg-0.3.9/lib/dbd/pg/statement.rb:37:in `execute' DBI::ProgrammingError ERROR: text search configuration "default_french" does not exist /path/to/ruby/1.9.1/gems/dbd-pg-0.3.9/lib/dbd/pg/statement.rb:62:in `rescue in execute' /path/to/ruby/1.9.1/gems/dbd-pg-0.3.9/lib/dbd/pg/statement.rb:37:in `execute'
lib/odba/index.rb
def do_update_index(origin_id, search_text, target_id=nil) # :nodoc: ODBA.storage.update_fulltext_index(@index_name, origin_id, search_text, target_id, @dictionary) end
lib/odba/storage.rb
def update_fulltext_index(index_name, origin_id, search_term, target_id, dict) search_term = search_term.gsub(/\s+/, ' ').strip if(target_id) self.dbi.do <<-SQL, origin_id, dict, search_term, target_id INSERT INTO #{index_name} (origin_id, search_term, target_id) VALUES (?, to_tsvector(?, ?), ?) SQL else self.dbi.do <<-SQL, dict, search_term, origin_id UPDATE #{index_name} SET search_term=to_tsvector(?, ?) WHERE origin_id=? SQL end end
This is needed to update of odba.
ODBA does not have valid table name of current tsearch2 extension for index creation.
production server also run PostgreSQL 8.3. (But odba has code for < 8.2.)
ch.oddb> generate_dictionaries -> ERROR: relation "pg_ts_cfg" does not exist LINE 1: DELETE FROM pg_ts_cfg ^
setup for fulltext search.
# psql CREATE EXTENSION tsearch2; # grant oddb.org.ruby193=# GRANT ALL ON pg_ts_config to oddb; GRANT oddb.org.ruby193=# GRANT ALL ON pg_ts_config_map to oddb; GRANT oddb.org.ruby193=# GRANT ALL ON pg_ts_dict to oddb; GRANT oddb.org.ruby193=# GRANT ALL ON pg_ts_parser to oddb; GRANT
oddb.org.ruby193=# select * from pg_ts_config; cfgname | cfgnamespace | cfgowner | cfgparser ------------+--------------+----------+----------- simple | 11 | 10 | 3722 danish | 11 | 10 | 3722 dutch | 11 | 10 | 3722 english | 11 | 10 | 3722 finnish | 11 | 10 | 3722 french | 11 | 10 | 3722 german | 11 | 10 | 3722 hungarian | 11 | 10 | 3722 italian | 11 | 10 | 3722 norwegian | 11 | 10 | 3722 portuguese | 11 | 10 | 3722 romanian | 11 | 10 | 3722 russian | 11 | 10 | 3722 spanish | 11 | 10 | 3722 swedish | 11 | 10 | 3722 turkish | 11 | 10 | 3722 (16 rows)
oddb.org.ruby193=# \d pg_ts_config_map; Table "pg_catalog.pg_ts_config_map" Column | Type | Modifiers --------------+---------+----------- mapcfg | oid | not null maptokentype | integer | not null mapseqno | integer | not null mapdict | oid | not null Indexes: "pg_ts_config_map_index" UNIQUE, btree (mapcfg, maptokentype, mapseqno)
dictionary
of fulltext is needed for index.
z.B.
oddb.org.ruby193=# select * from fachinfo_index_fr limit 3; origin_id | search_term | target_id -----------+-------------+----------- 10187788 | | 11977 28685169 | | 11977 25757193 | | 18601 (3 rows) oddb.org.ruby193=# select * from unwanted_effects_index_de limit 3; origin_id | search_term | target_id -----------+-------------+----------- 28954758 | | 25647596 28954758 | | 25647641 28954758 | | 25647686
But ODBA is needed many change for postgres-8.3 or later.
suspend.
Corrupted Data ODDB:Text::Chapter in invoice objeect.
Error: NoMethodError Message: undefined method `type' for #<ODDB::Text::Chapter:0x00000010ab3a28> Backtrace: /usr/local/lib/ruby/gems/1.9.1/gems/odba-1.0.8/lib/odba/stub.rb:112:in `method_missing' /var/www/oddb.org/src/plugin/info_invoicer.rb:23:in `block (2 levels) in active_companies' /var/www/oddb.org/src/plugin/info_invoicer.rb:22:in `each' /var/www/oddb.org/src/plugin/info_invoicer.rb:22:in `block in active_companies' /var/www/oddb.org/src/plugin/info_invoicer.rb:20:in `each'
strange InvoiceItem.
ch.oddb> invoices.values.select{|inv| !inv.items.values.select{|item| !item.respond_to?(:type) }.empty? }.first.items.values.first.type -> undefined method `type' for #<ODDB::Text::Chapter:0x0000000a05eee8> ch.oddb> invoices.values.select{|inv| !inv.items.values.select{|item| !item.respond_to?(:type) }.empty? }.first.items.values.first.class -> ODDB::InvoiceItem
delete strange Object.
ch.oddb> invoices.values.select{|inv| !inv.items.values.select{|item| !item.respond_to?(:type) }.empty? }.first.items.values.first.odba_id -> 29502873 ch.oddb> ODBA.cache.fetch(29502873) -> ODDB::Text::Chapter ch.oddb> ODBA.cache.fetch(29502873).odba_delete -> ODDB::Text::Chapter ch.oddb> invoices.values.select{|inv| !inv.items.values.select{|item| !item.respond_to?(:type) }.empty? }.length -> 0
Plugin: ODDB::SwissindexPharmaPlugin Error: TypeError Message: can't convert nil into Integer Backtrace: /var/www/oddb.org/src/plugin/swissindex.rb:234:in `sprintf' /var/www/oddb.org/src/plugin/swissindex.rb:234:in `block in report' /var/www/oddb.org/src/plugin/swissindex.rb:233:in `each' /var/www/oddb.org/src/plugin/swissindex.rb:233:in `report' /var/www/oddb.org/src/plugin/plugin.rb:54:in `block in log_info' ...
Now Data does not have any probelem for this job.