Redoing update sandoz.bbmb and sandoz.xmlconv as documented in yesterdays blog.
Testing it with the following calls
curl -v http://sandoz.xmlconv.bbmb.ch/propharma -d@test/data/confuse.xml
curl -v http://sandoz.xmlconv.bbmb.ch/propharma -d@test/data/gard.xml
curl -v http://sandoz.xmlconv.bbmb.ch/propharma -d@test/data/umlaut_utf_8_problem.xml
Verifiying it on http://sandoz.xmlconv.bbmb.ch/de/sbsm, where I see
33795 http://80.218.53.88 14.06.2017 12:04:08 file:/.../var/output/99_20170614120408037.txt Bestellung via BBMB erfolgreich 33794 http://80.218.53.88 14.06.2017 12:03:54 file:/.../var/output/99_20170614120354052.txt Fehler 33793 http://80.218.53.88 14.06.2017 12:02:35 file:/.../var/output/99_20170614120235030.txt Bestellung via BBMB erfolgreich
We know that sending gard results in the error as seen in http://sandoz.xmlconv.bbmb.ch/de/sbsm/transaction/state_id/69811778238800/transaction_id/33794
RuntimeError Bestellung OK, Eintrag in BBMB fehlgeschlagen: RuntimeError can't commit empty order
The transactions 33793 and 33795 showed no error. Verifying it via user 99 on http://sandoz.bbmb.ch/de/bbmb/orders/customer_id/99 we have
But we still have empty orders as seen by these lines
33797 http://194.158.242.196 14.06.2017 12:16:05 file:/.../sandoz.xmlconv.bbmb.ch/var/output Leer 33796 http://85.7.226.134 14.06.2017 12:05:01 file:/.../sandoz.xmlconv.bbmb.ch/var/output Leer 33792 http://46.14.254.205 14.06.2017 12:01:47 file:/.../sandoz.xmlconv.bbmb.ch/var/output Leer
Added the lines for sending smtp_mails to etc/xmlconv.yml. Looking at post orders from 46.14.254.205 I find in log/2017/06/09/error_log the lines
[Fri Jun 09 17:00:53 2017] [notice] Received Request POST [Fri Jun 09 17:00:53 2017] [notice] from 46.14.254.205 [Fri Jun 09 17:00:53 2017] [notice] content-length: 752
And in log/2017/06/09/access_log the line 46.14.254.205 - - [09/Jun/2017:17:00:53 +0200] "POST /pharmatic HTTP/1.1" 200 1664 "-" "-"
This correspond to 33675 http://46.14.254.205:51153 09.06.2017 17:00:53 file:/.../var/output/4100602866_20170609170053026.txt Bestellung via BBMB erfolgreich
Looking at
I see that it was posted by communicationSoftwareId="Pharmatic NETReq.exe V1.20.0.4 (Requestdate: 09.06.2017 17:09)"
. Saving the xml file as test/data/4100602866.xml. Changing customer_id to 99 and testing it locally via curl -v http://sandoz.xmlconv.bbmb.ngiger.ch/pharmatic -d@test/data/4100602866.xml
. Result was HTTP/1.1 200 OK
and the returned xml was
<?xml version='1.0' encoding='UTF-8'?> <customerOrderResponse xmlns='http://www.e-galexis.com/schemas/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.e-galexis.com/schemas/ http://www.e-galexis.com/schemas/POS/customerOrder/customerOrderResponse.xsd' version='1.0' roundUpForCondition='false' backLogDesired='false' language='de' productDescriptionDesired='false'> <clientResponse number='99-134'/> <orderHeaderResponse referenceNumber='108953'> <deliveryAddress/> </orderHeaderResponse> <orderLinesResponse> <productOrderLineResponse lineAccepted='true' backLogLine='false' roundUpForConditionDone='false' productReplaced='false'> <productOrderLine orderQuantity='1'> <pharmaCode id='4497405'/> </productOrderLine> <productResponse wholesalerProductCode='44020392' description='Pantoprazol Sandoz 20 mg Tbl 15'/> <availability status='yes'/> </productOrderLineResponse> <productOrderLineResponse lineAccepted='true' backLogLine='false' roundUpForConditionDone='false' productReplaced='false'> <productOrderLine orderQuantity='3'> <pharmaCode id='4995793'/> </productOrderLine> <productResponse wholesalerProductCode='44031882' description='Co-Candesartan Sandoz 8/12.5 mg Tbl 98'/> <availability status='yes'/> </productOrderLineResponse> <productOrderLineResponse lineAccepted='true' backLogLine='false' roundUpForConditionDone='false' productReplaced='false'> <productOrderLine orderQuantity='5'> <pharmaCode id='5404392'/> </productOrderLine> <productResponse wholesalerProductCode='44031890' description='RABEPRAZOL Sandoz 20mg Tbl 56'/> <availability status='yes'/> </productOrderLineResponse> </orderLinesResponse> </customerOrderResponse>
Will download and save the last 3 orders for all customers where we got an empty order. But first we will test with another injection tool from https://chrome.google.com/webstore/detail/advanced-rest-client/hgmloofddffdnphfgcellkdfbfbjeloo.
Send two orders from two terminal session almost concurrently. Both arrived without problem, but with 2 seconds difference, because SBSM is not multi-threaded.
28371 http://192.168.0.70 14.06.2017 14:07:42 file:/.../var/output/99_20170614140742068.txt Bestellung via BBMB erfolgreich 28370 http://192.168.0.70 14.06.2017 14:07:40 file:/.../var/output/99_20170614140739098.txt Bestellung via BBMB erfolgreich
Sending via the Advanced REST Client to http://sandoz.xmlconv.bbmb.ngiger.ch/pharmatic worked fine, too. As result it shows 200 OK 1443.00ms
It has helpful timing information
Start date: 6/14/2017 Time to connect: 0.6 ms Send time: 11.36 ms Wait time: 1429.1 ms Receive time: 1.99 ms Total: 1443.05 ms
The request headers were
Content-Length: 156 Content-Type: multipart/form-data; boundary=----WebKitFormBoundary1s0KwbfYfAMYpNB8
The response headers are
Content-Length: 404 Content-Type: text/html;charset=UTF-8 Date: Wed, 14 Jun 2017 11:50:22 GMT Server: WEBrick/1.3.1 (Ruby/2.4.0/2016-12-24) Set-Cookie: _session_id=10afa18a041bb85f8c607a9aead; path=/
But looking at the content of the returned XML
<?xml version="1.0" encoding="UTF-8"?> <customerOrderResponse xmlns="http://www.e-galexis.com/schemas/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.e-galexis.com/schemas/ http://www.e-galexis.com/schemas/POS/customerOrder/customerOrderResponse.xsd" version="1.0" roundUpForCondition="false" backLogDesired="false" language="de" productDescriptionDesired="false"/>
we see that no order was placed. And the corresponding log entry confirms this 28369 http://192.168.0.70 14.06.2017 14:06:48 file:/.../sandoz.xmlconv.bbmb.ch/var/output Leer
Now I will compare it to the answer from the pre-rack on http://sandoz.xmlconv.bbmb.ch/pharmatic. It returned the following xml
<?xml version='1.0' encoding='UTF-8' ?> <customerOrderResponse backLogDesired="false" language="de" productDescriptionDesired="false" roundUpForCondition="false" xsi:schemaLocation="http://www.e-galexis.com/schemas/ http://www.e-galexis.com/schemas/POS/customerOrder/customerOrderResponse.xsd" version="1.0" />
and the command is also marked as leer
33798 http://80.218.53.88:41244 14.06.2017 14:25:17 file:/.../sandoz.xmlconv.bbmb.ch/var/output Leer
Input Output fileUpload [object Object] Fehler
Did I configure the test request wrong, as I said that I want to load file. Should I enter the content directly?
Now breaking at sbsm/lib/sbsm/app.rb I get
[1] pry(#<XmlConv::Util::RackInterface>)> request => #<Rack::Request:0x0055b85eb0a2e0 @env= {"CONTENT_LENGTH"=>"824", "CONTENT_TYPE"=>"application/x-www-form-urlencoded", "GATEWAY_INTERFACE"=>"CGI/1.1", "PATH_INFO"=>"/pharmatic", "QUERY_STRING"=>"", "REMOTE_ADDR"=>"::1", "REMOTE_HOST"=>"::1", "REQUEST_METHOD"=>"POST", "REQUEST_URI"=>"http://sandoz.xmlconv.bbmb.ngiger.ch/pharmatic", "SCRIPT_NAME"=>"", "SERVER_NAME"=>"sandoz.xmlconv.bbmb.ngiger.ch", "SERVER_PORT"=>"80", "SERVER_PROTOCOL"=>"HTTP/1.1", "SERVER_SOFTWARE"=>"WEBrick/1.3.1 (Ruby/2.4.0/2016-12-24)", "HTTP_HOST"=>"localhost:8011", "HTTP_USER_AGENT"=>"curl/7.38.0", "HTTP_ACCEPT"=>"*/*", "HTTP_X_FORWARDED_FOR"=>"192.168.0.70", "HTTP_X_FORWARDED_HOST"=>"sandoz.xmlconv.bbmb.ngiger.ch", "HTTP_X_FORWARDED_SERVER"=>"sandoz.xmlconv.bbmb.ngiger.ch", "HTTP_CONNECTION"=>"close", "rack.version"=>[1, 3], "rack.input"=>#<Rack::Lint::InputWrapper:0x0055b85eb0a330 @input=#<Rack::Lint::InputWrapper:0x0055b85eb159d8 @input=#<StringIO:0x0055b85eb20ce8>>>, "rack.errors"=>#<Rack::Lint::ErrorWrapper:0x0055b85eb0a308 @error=#<Rack::Lint::ErrorWrapper:0x0055b85eb15960 @error=#<IO:<STDERR>>>>, "rack.multithread"=>true, "rack.multiprocess"=>false, "rack.run_once"=>false, "rack.url_scheme"=>"http", "rack.hijack?"=>true, "rack.hijack"=>#<Proc:0x0055b85eb0a5d8@/var/www/sandoz.xmlconv.bbmb.ch/vendor/ruby/2.4.0/gems/rack-2.0.3/lib/rack/lint.rb:525>, "rack.hijack_io"=>nil, "HTTP_VERSION"=>"HTTP/1.1", "REQUEST_PATH"=>"/pharmatic", "rack.tempfiles"=>[]}, @params=nil>
and in lib/xmlconv/util/transaction.rb @ line 29 I see the correct input
[2] pry(#<XmlConv::Util::Transaction>)> puts @input <?xml version "1.0" encoding="utf-8"?><customerOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="1.0" language="fr" productDescriptionDesired="true" communicationSoftwareId="Pharmatic NETReq.exe V1.20.0.4 (Requestdate: 09.06.2017 17:09)" xmlns="http://www.e-galexis.com/schemas/"> <client number="99" password="7601001319042" /> <orderHeader deliveryDate="2017-06-09" referenceNumber="108953" /> <orderLines> <productOrderLine orderQuantity="1"> <pharmaCode id="4497405" /> </productOrderLine> <productOrderLine orderQuantity="3"> <pharmaCode id="4995793" /> </productOrderLine> <productOrderLine orderQuantity="5"> <pharmaCode id="5404392" /> </productOrderLine> </orderLines></customerOrder> [3] pry(#<XmlConv::Util::Transaction>)> backtrace --> #0 XmlConv::Util::Transaction.execute at /home/niklaus/git/xmlconv/lib/xmlconv/util/transaction.rb:29 #1 XmlConv::Util::Application._execute(transaction#XmlConv::Util::Transaction) at /home/niklaus/git/xmlconv/lib/xmlconv/util/application.rb:43 #2 XmlConv::Util::Application.execute(transaction#XmlConv::Util::Transaction) at /home/niklaus/git/xmlconv/lib/xmlconv/util/application.rb:36 #3 XmlConvApp.execute_with_response(transaction#XmlConv::Util::Transaction) at /home/niklaus/git/xmlconv/lib/xmlconv/util/application.rb:140 #4 XmlConv::State::Login.initialize(session#XmlConv::Util::Session, model#Class) at /home/niklaus/git/xmlconv/lib/xmlconv/state/login.rb:29 ͱ-- #5 Class.new(*args) at /home/niklaus/git/sbsm/lib/sbsm/session.rb:389 #6 SBSM::Session.logout at /home/niklaus/git/sbsm/lib/sbsm/session.rb:389 #7 block in SBSM::Session.block in process_rack(rack_request#Rack::Request) at /home/niklaus/git/sbsm/lib/sbsm/session.rb:228 ͱ-- #8 Thread::Mutex.synchronize at /home/niklaus/git/sbsm/lib/sbsm/session.rb:212 #9 SBSM::Session.process_rack(rack_request#Rack::Request) at /home/niklaus/git/sbsm/lib/sbsm/session.rb:212 #10 SBSM::RackInterface.call(env#Hash) at /home/niklaus/git/sbsm/lib/sbsm/app.rb:120 #11 Rack::Lint._call(env#Hash) at /var/www/sandoz.xmlconv.bbmb.ch/vendor/ruby/2.4.0/gems/rack-2.0.3/lib/rack/lint.rb:49 #12 Rack::Lint.call(env#Hash) at /var/www/sandoz.xmlconv.bbmb.ch/vendor/ruby/2.4.0/gems/rack-2.0.3/lib/rack/lint.rb:37 #13 Rack::ShowExceptions.call(env#Hash) at /var/www/sandoz.xmlconv.bbmb.ch/vendor/ruby/2.4.0/gems/rack-2.0.3/lib/rack/show_exceptions.rb:23 #14 Rack::ContentLength.call(env#Hash) at /var/www/sandoz.xmlconv.bbmb.ch/vendor/ruby/2.4.0/gems/rack-2.0.3/lib/rack/content_length.rb:15 #15 Rack::Static.call(env#Hash) at /var/www/sandoz.xmlconv.bbmb.ch/vendor/ruby/2.4.0/gems/rack-2.0.3/lib/rack/static.rb:149 #16 Rack::CommonLogger.call(env#Hash) at /var/www/sandoz.xmlconv.bbmb.ch/vendor/ruby/2.4.0/gems/rack-2.0.3/lib/rack/common_logger.rb:33 #17 Rack::TempfileReaper.call(env#Hash) at /var/www/sandoz.xmlconv.bbmb.ch/vendor/ruby/2.4.0/gems/rack-2.0.3/lib/rack/tempfile_reaper.rb:15 #18 Rack::Lint._call(env#Hash) at /var/www/sandoz.xmlconv.bbmb.ch/vendor/ruby/2.4.0/gems/rack-2.0.3/lib/rack/lint.rb:49 #19 Rack::Lint.call(env#Hash) at /var/www/sandoz.xmlconv.bbmb.ch/vendor/ruby/2.4.0/gems/rack-2.0.3/lib/rack/lint.rb:37 #20 Rack::ShowExceptions.call(env#Hash) at /var/www/sandoz.xmlconv.bbmb.ch/vendor/ruby/2.4.0/gems/rack-2.0.3/lib/rack/show_exceptions.rb:23 #21 Rack::CommonLogger.call(env#Hash) at /var/www/sandoz.xmlconv.bbmb.ch/vendor/ruby/2.4.0/gems/rack-2.0.3/lib/rack/common_logger.rb:33 #22 Rack::Chunked.call(env#Hash) at /var/www/sandoz.xmlconv.bbmb.ch/vendor/ruby/2.4.0/gems/rack-2.0.3/lib/rack/chunked.rb:54 #23 Rack::ContentLength.call(env#Hash) at /var/www/sandoz.xmlconv.bbmb.ch/vendor/ruby/2.4.0/gems/rack-2.0.3/lib/rack/content_length.rb:15 #24 Rack::Handler::WEBrick.service(req#WEBrick::HTTPRequest, res#WEBrick::HTTPResponse) at /var/www/sandoz.xmlconv.bbmb.ch/vendor/ruby/2.4.0/gems/rack-2.0.3/lib/rack/handler/webrick.rb:86 #25 WEBrick::HTTPServer.service(req#WEBrick::HTTPRequest, res#WEBrick::HTTPResponse) at /usr/local/ruby-2.4.0/lib/ruby/2.4.0/webrick/httpserver.rb:140 #26 WEBrick::HTTPServer.run(sock#TCPSocket) at /usr/local/ruby-2.4.0/lib/ruby/2.4.0/webrick/httpserver.rb:96 #27 block in WEBrick::GenericServer.block in start_thread(sock#TCPSocket, &block#NilClass) at /usr/local/ruby-2.4.0/lib/ruby/2.4.0/webrick/server.rb:290
Yesterday the encoding problem stemmed from the fact that this method execute was unable to decode the input and construct the model.
When posting via ARC the @input variable in the execute method is "fileUpload [object Object]"
. Whether I configure ARC to send a file or a raw content.
Maybe this is the root of the problem, that the new rack based SBSM does not handle correctly fileuploads. Debugging the ARC content gives me
[26] pry(#<XmlConv::Util::RackInterface>)> y = request.body.read => "------WebKitFormBoundaryA6RnRpIaoLvbfxyP\r\n" + "Content-Disposition: form-data; name=\"fileUpload\"\r\n" + "\r\n" + "[object Object]\r\n" + "------WebKitFormBoundaryA6RnRpIaoLvbfxyP\r\n" + "Content-Disposition: form-data; name=\"<?xml version\"\r\n" + "\r\n" + "\"1.0\" encoding=\"utf-8\"?>\r\n" + "<customerOrder\r\n" + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n" + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" version=\"1.0\"\r\n" + " language=\"fr\" productDescriptionDesired=\"true\"\r\n" + " communicationSoftwareId=\"Pharmatic NETReq.exe V1.20.0.4\r\n" + " (Requestdate: 09.06.2017 17:09)\"\r\n" + " xmlns=\"http://www.e-galexis.com/schemas/\">\r\n" + " <client number=\"99\" password=\"7601001319042\" />\r\n" + " <orderHeader deliveryDate=\"2017-06-09\" referenceNumber=\"108953\"\r\n" + " />\r\n" + " <orderLines>\r\n" + " <productOrderLine orderQuantity=\"1\">\r\n" + " <pharmaCode id=\"4497405\" />\r\n" + " </productOrderLine>\r\n" + " <productOrderLine orderQuantity=\"3\">\r\n" + " <pharmaCode id=\"4995793\" />\r\n" + " </productOrderLine>\r\n" + " <productOrderLine orderQuantity=\"5\">\r\n" + " <pharmaCode id=\"5404392\" />\r\n" + " </productOrderLine>\r\n" + " </orderLines>\r\n" + "</customerOrder>\r\n" + "------WebKitFormBoundaryA6RnRpIaoLvbfxyP--\r\n" [31] pry(#<XmlConv::Util::RackInterface>)> request.media_type => "multipart/form-data" [32] pry(#<XmlConv::Util::RackInterface>)> request.media_type_params => {"boundary"=>"----WebKitFormBoundaryA6RnRpIaoLvbfxyP"}
This problem is fixed with commit Find xml in any request paramater, not only the first
To ease debugging I also added a debug statement, where I see all the request.params in the app.log. This should help pinpoint errors for other tools which might format the POST request in another forms.
Testing with ARC, rest-client and curl works now. But displaying http://sandoz.xmlconv.bbmb.ngiger.ch/now fails with the error
NoMethodError at / undefined method `navigation' for XmlConv::Util::KnownUser:Class
because I corrected the unknown user in SBSM.
Must add http:// before the remote_ip. Verified again that I cannot determine the remote port used pry
4] pry(#<XmlConv::Util::Session>)> rack_request => #<Rack::Request:0x0056015efbfb20 @env= {"CONTENT_LENGTH"=>"629", "CONTENT_TYPE"=>"application/x-www-form-urlencoded", "GATEWAY_INTERFACE"=>"CGI/1.1", "PATH_INFO"=>"/propharma", "QUERY_STRING"=>"", "REMOTE_ADDR"=>"::1", "REMOTE_HOST"=>"::1", "REQUEST_METHOD"=>"POST", "REQUEST_URI"=>"http://sandoz.xmlconv.bbmb.ngiger.ch/propharma", "SCRIPT_NAME"=>"", "SERVER_NAME"=>"sandoz.xmlconv.bbmb.ngiger.ch", "SERVER_PORT"=>"80", "SERVER_PROTOCOL"=>"HTTP/1.1", "SERVER_SOFTWARE"=>"WEBrick/1.3.1 (Ruby/2.4.0/2016-12-24)", "HTTP_HOST"=>"localhost:8011", "HTTP_USER_AGENT"=>"curl/7.38.0", "HTTP_ACCEPT"=>"*/*", "HTTP_X_FORWARDED_FOR"=>"192.168.0.70", "HTTP_X_FORWARDED_HOST"=>"sandoz.xmlconv.bbmb.ngiger.ch", "HTTP_X_FORWARDED_SERVER"=>"sandoz.xmlconv.bbmb.ngiger.ch", "HTTP_CONNECTION"=>"close", "rack.version"=>[1, 3], "rack.input"=>#<Rack::Lint::InputWrapper:0x0056015efbfc10 @input=#<Rack::Lint::InputWrapper:0x0056015efcb358 @input=#<StringIO:0x0056015efda718>>>, "rack.errors"=>#<Rack::Lint::ErrorWrapper:0x0056015efbfb98 @error=#<Rack::Lint::ErrorWrapper:0x0056015efcb330 @error=#<IO:<STDERR>>>>, "rack.multithread"=>true, "rack.multiprocess"=>false, "rack.run_once"=>false, "rack.url_scheme"=>"http", "rack.hijack?"=>true, "rack.hijack"=>#<Proc:0x0056015efc8068@/var/www/sandoz.xmlconv.bbmb.ch/vendor/ruby240/ruby/2.4.0/gems/rack-2.0.3/lib/rack/lint.rb:525>, "rack.hijack_io"=>nil, "HTTP_VERSION"=>"HTTP/1.1", "REQUEST_PATH"=>"/propharma", "rack.tempfiles"=>[], "rack.request.cookie_hash"=>{}, "rack.request.query_string"=>"", "rack.request.query_hash"=>{}, "rack.request.form_hash"=> {"<?xml version"=> "\"1.0\" encoding=\"utf-8\"?><customerOrder xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" version=\"1.0\" language=\"fr\" productDescriptionDesired=\"true\" communicationSoftwareId=\"ywesee Test\" xmlns=\"http://www.e-galexis.com/schemas/\"> <client number=\"99\" password=\"\" /> <orderHeader deliveryDate=\"2016-07-15\" referenceNumber=\"99\"/> <orderLines> <productOrderLine orderQuantity=\"2\"> <pharmaCode id=\"2508375\" /> </productOrderLine> <productOrderLine orderQuantity=\"2\"> <pharmaCode id=\"5195126\" /> </productOrderLine> </orderLines></customerOrder>"}, "rack.request.form_vars"=> "<?xml version=\"1.0\" encoding=\"utf-8\"?><customerOrder xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" version=\"1.0\" language=\"fr\" productDescriptionDesired=\"true\" communicationSoftwareId=\"ywesee Test\" xmlns=\"http://www.e-galexis.com/schemas/\"> <client number=\"99\" password=\"\" /> <orderHeader deliveryDate=\"2016-07-15\" referenceNumber=\"99\"/> <orderLines> <productOrderLine orderQuantity=\"2\"> <pharmaCode id=\"2508375\" /> </productOrderLine> <productOrderLine orderQuantity=\"2\"> <pharmaCode id=\"5195126\" /> </productOrderLine> </orderLines></customerOrder>", "rack.request.form_input"=>#<Rack::Lint::InputWrapper:0x0056015efbfc10 @input=#<Rack::Lint::InputWrapper:0x0056015efcb358 @input=#<StringIO:0x0056015efda718>>>}, @params= {"<?xml version"=> "\"1.0\" encoding=\"utf-8\"?><customerOrder xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" version=\"1.0\" language=\"fr\" productDescriptionDesired=\"true\" communicationSoftwareId=\"ywesee Test\" xmlns=\"http://www.e-galexis.com/schemas/\"> <client number=\"99\" password=\"\" /> <orderHeader deliveryDate=\"2016-07-15\" referenceNumber=\"99\"/> <orderLines> <productOrderLine orderQuantity=\"2\"> <pharmaCode id=\"2508375\" /> </productOrderLine> <productOrderLine orderQuantity=\"2\"> <pharmaCode id=\"5195126\" /> </productOrderLine> </orderLines></customerOrder>"}, @uri="/propharma">
Pushed commits
Testing it with the tool at https://www.hurl.it/. As answer I received Internal Server Error. But this is due to the fact, that my server is not open to the internet. Therefore I did not see anything in my log.
Installing http://www.fiddler2.com/fiddler2/ on my virtual windows machine.
Also installing https://github.com/wiztools/rest-client. With this tool I must use even another method to get the input
[23] pry(#<XmlConv::Util::RackInterface>)> request.body.rewind => nil [24] pry(#<XmlConv::Util::RackInterface>)> puts request.body.read.to_s <?xml version="1.0" encoding="utf-8"?> <customerOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="1.0" language="fr" productDescriptionDesired="true" communicationSoftwareId="Pharmatic NETReq.exe V1.20.0.4 (Requestdate: 09.06.2017 17:09)" xmlns="http://www.e-galexis.com/schemas/"> <client number="99" password="7601001319042" /> <orderHeader deliveryDate="2017-06-09" referenceNumber="108953" /> <orderLines> <productOrderLine orderQuantity="1"> <pharmaCode id="4497405" /> </productOrderLine> <productOrderLine orderQuantity="3"> <pharmaCode id="4995793" /> </productOrderLine> <productOrderLine orderQuantity="5"> <pharmaCode id="5404392" /> </productOrderLine> </orderLines> </customerOrder>
Under modruby the xml_src was read as xml_src = $stdin.read(content_length)
. This must be implemented differently under RACK. I will create in SBSM a read only variable post_content.
This was quite easy to fix and I think the rest-client is probably generating a request which forces me to use method which mimicks the old behaviour.
Pushed commits
Pushed yesterday work to new rack branch via commitInitial port to rack. localhost:8012 works
Must correct the rewrite rule in the apache config. to make URL like /de/gcc/search/zone/drugs/search_query/Aspirin/search_type/st_oddb work.
Added the following lines to the apache conf to debug my rewrite rules
RewriteLog "/var/log/apache2/rewrite.log" RewriteLogLevel 3
Accessing http://localhost:8012/de/gcc/fachinfo/reg/59225 works. But not via Apache http://oddb-ci2.dyndns.org/de/gcc/fachinfo/reg/59225. Why?
After placing the new rewrite rule RewriteRule ^/(.*)$ http://localhost:8012/$1 [P]
at the top of the rules, accessing the links in the fachinfo links work.
Following the "SL Neuaufnahmen" gets the error
NoMethodError at /de/gcc/rss/channel/sl_introduction.rss undefined method `passthru' for nil:NilClass /home/niklaus/git/sbsm/lib/sbsm/session.rb:435:in `passthru' /var/www/oddb_rack.org/src/state/rss/passthru.rb:16:in `init' /home/niklaus/git/sbsm/lib/sbsm/session.rb:237:in `block in process_rack' /home/niklaus/git/sbsm/lib/sbsm/session.rb:210:in `synchronize' /home/niklaus/git/sbsm/lib/sbsm/session.rb:210:in `process_rack' /home/niklaus/git/sbsm/lib/sbsm/app.rb:119:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/lint.rb:49:in `_call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/lint.rb:37:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/show_exceptions.rb:23:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/content_length.rb:15:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/static.rb:149:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/common_logger.rb:33:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/tempfile_reaper.rb:15:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/lint.rb:49:in `_call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/lint.rb:37:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/show_exceptions.rb:23:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/common_logger.rb:33:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/chunked.rb:54:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/content_length.rb:15:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/handler/webrick.rb:86:in `service' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/webrick/httpserver.rb:140:in `service' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/webrick/httpserver.rb:96:in `run' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/webrick/server.rb:290:in `block in start_thread'
The links "Analysen", "Apotheken", "Interaktionen", "Services", "Spital", "Zulassungen" work. "MiGel" does not work.
Searching for Aspirin via http://oddb-ci2.dyndns.org/de/gcc/search/zone/drugs/search_query/Aspirin/search_type/st_oddb?#best_result
throws now
DRb::DRbConnError at /de/gcc/search/zone/drugs/search_query/Aspirin/search_type/st_oddb druby://localhost:10999 - #<Errno::ECONNREFUSED: Connection refused - connect(2) for "localhost" port 10999> /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:745:in `rescue in block in open' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:739:in `block in open' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:738:in `each' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:738:in `open' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:1248:in `initialize' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:1228:in `new' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:1228:in `open' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:1141:in `block in method_missing' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:1160:in `with_friend' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:1140:in `method_missing' /var/www/oddb_rack.org/src/util/oddbapp.rb:793:in `get_currency_rate' /var/www/oddb_rack.org/src/util/oddbapp.rb:1571:in `method_missing' /var/www/oddb_rack.org/src/util/session.rb:157:in `get_currency_rate' /var/www/oddb_rack.org/src/view/dataformat.rb:196:in `convert_price' /var/www/oddb_rack.org/src/view/dataformat.rb:159:in `formatted_price' /var/www/oddb_rack.org/src/view/dataformat.rb:135:in `price_exfactory' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:83:in `create' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:284:in `compose_component' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:213:in `block in compose' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:209:in `each' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:209:in `compose' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/list.rb:67:in `block in compose_list' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/list.rb:65:in `each' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/list.rb:65:in `each_with_index' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/list.rb:65:in `compose_list' /var/www/oddb_rack.org/src/view/drugs/resultlist.rb:323:in `block in compose_list' /var/www/oddb_rack.org/src/view/drugs/resultlist.rb:318:in `each' /var/www/oddb_rack.org/src/view/drugs/resultlist.rb:318:in `compose_list' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/list.rb:54:in `compose' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:72:in `init' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/list.rb:129:in `init' /var/www/oddb_rack.org/src/view/drugs/resultlist.rb:254:in `init' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/component.rb:139:in `initialize' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:76:in `new' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:76:in `create' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:284:in `compose_component' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:213:in `block in compose' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:209:in `each' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:209:in `compose' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:72:in `init' /var/www/oddb_rack.org/src/view/drugs/result.rb:126:in `init' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/component.rb:139:in `initialize' /var/www/oddb_rack.org/src/view/publictemplate.rb:71:in `new' /var/www/oddb_rack.org/src/view/publictemplate.rb:71:in `content' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:83:in `create' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:284:in `compose_component' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:213:in `block in compose' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:209:in `each' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:209:in `compose' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:72:in `init' /var/www/oddb_rack.org/src/view/publictemplate.rb:68:in `init' /var/www/oddb_rack.org/src/view/resulttemplate.rb:29:in `init' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/component.rb:139:in `initialize' /home/niklaus/git/sbsm/lib/sbsm/state.rb:240:in `new' /home/niklaus/git/sbsm/lib/sbsm/state.rb:240:in `view' /home/niklaus/git/sbsm/lib/sbsm/state.rb:173:in `to_html' /home/niklaus/git/sbsm/lib/sbsm/session.rb:491:in `to_html' /home/niklaus/git/sbsm/lib/sbsm/session.rb:252:in `block in process_rack' /home/niklaus/git/sbsm/lib/sbsm/session.rb:210:in `synchronize' /home/niklaus/git/sbsm/lib/sbsm/session.rb:210:in `process_rack' /home/niklaus/git/sbsm/lib/sbsm/app.rb:119:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/lint.rb:49:in `_call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/lint.rb:37:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/show_exceptions.rb:23:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/content_length.rb:15:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/static.rb:149:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/common_logger.rb:33:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/tempfile_reaper.rb:15:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/lint.rb:49:in `_call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/lint.rb:37:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/show_exceptions.rb:23:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/common_logger.rb:33:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/chunked.rb:54:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/content_length.rb:15:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/handler/webrick.rb:86:in `service' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/webrick/httpserver.rb:140:in `service' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/webrick/httpserver.rb:96:in `run' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/webrick/server.rb:290:in `block in start_thread' ODDB::View::Drugs::ResultList::COMPONENTS[[8, 0]] in create(price_exfactory) ODDB::View::Drugs::ResultComposite::COMPONENTS[[0, 2]] in create(ODDB::View::Drugs::ResultList) ODDB::View::Drugs::Result::COMPONENTS[[0, 2]] in create(content)
This is now at least an error inside the rack app, where I can use pry. No. The problem was that the currency service was not started. Now a search via IKSNR works. A search via Asprin (price) and for Nolvadex via trademark take so much time, that I must stop the service. Done another trademark search for Nolvadex, waited till I got a ReadTimeout.
Net::ReadTimeout: Net::ReadTimeout /usr/local/ruby-2.4.0/lib/ruby/2.4.0/net/protocol.rb:176:in `rbuf_fill' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/net/protocol.rb:154:in `readuntil' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/net/protocol.rb:164:in `readline' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/net/http/response.rb:40:in `read_status_line' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/net/http/response.rb:29:in `read_new' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/net/http.rb:1446:in `block in transport_request' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/net/http.rb:1443:in `catch' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/net/http.rb:1443:in `transport_request' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/net/http.rb:1416:in `request' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/open-uri.rb:329:in `block in open_http' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/net/http.rb:877:in `start' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/open-uri.rb:323:in `open_http' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/open-uri.rb:741:in `buffer_open' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/open-uri.rb:212:in `block in open_loop' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/open-uri.rb:210:in `catch' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/open-uri.rb:210:in `open_loop' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/open-uri.rb:151:in `open_uri' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/open-uri.rb:721:in `open' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/open-uri.rb:35:in `open' /var/www/oddb_rack.org/src/view/tooltip.rb:18:in `set_tooltip' /var/www/oddb_rack.org/src/view/additional_information.rb:267:in `ikscat' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:83:in `create' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:284:in `compose_component' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:213:in `block in compose' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:209:in `each' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:209:in `compose' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/list.rb:67:in `block in compose_list' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/list.rb:65:in `each' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/list.rb:65:in `each_with_index' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/list.rb:65:in `compose_list' /var/www/oddb_rack.org/src/view/drugs/resultlist.rb:323:in `block in compose_list' /var/www/oddb_rack.org/src/view/drugs/resultlist.rb:318:in `each' /var/www/oddb_rack.org/src/view/drugs/resultlist.rb:318:in `compose_list' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/list.rb:54:in `compose' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:72:in `init' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/list.rb:129:in `init' /var/www/oddb_rack.org/src/view/drugs/resultlist.rb:254:in `init' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/component.rb:139:in `initialize' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:76:in `new' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:76:in `create' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:284:in `compose_component' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:213:in `block in compose' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:209:in `each' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:209:in `compose' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:72:in `init' /var/www/oddb_rack.org/src/view/drugs/result.rb:126:in `init' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/component.rb:139:in `initialize' /var/www/oddb_rack.org/src/view/publictemplate.rb:71:in `new' /var/www/oddb_rack.org/src/view/publictemplate.rb:71:in `content' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:83:in `create' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:284:in `compose_component' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:213:in `block in compose' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:209:in `each' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:209:in `compose' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/composite.rb:72:in `init' /var/www/oddb_rack.org/src/view/publictemplate.rb:68:in `init' /var/www/oddb_rack.org/src/view/resulttemplate.rb:29:in `init' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/htmlgrid-1.1.4/lib/htmlgrid/component.rb:139:in `initialize' /home/niklaus/git/sbsm/lib/sbsm/state.rb:240:in `new' /home/niklaus/git/sbsm/lib/sbsm/state.rb:240:in `view' /home/niklaus/git/sbsm/lib/sbsm/state.rb:173:in `to_html' /home/niklaus/git/sbsm/lib/sbsm/session.rb:491:in `to_html' /home/niklaus/git/sbsm/lib/sbsm/session.rb:252:in `block in process_rack' /home/niklaus/git/sbsm/lib/sbsm/session.rb:210:in `synchronize' /home/niklaus/git/sbsm/lib/sbsm/session.rb:210:in `process_rack' /home/niklaus/git/sbsm/lib/sbsm/app.rb:119:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/lint.rb:49:in `_call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/lint.rb:37:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/show_exceptions.rb:23:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/content_length.rb:15:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/static.rb:149:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/common_logger.rb:33:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/tempfile_reaper.rb:15:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/lint.rb:49:in `_call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/lint.rb:37:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/show_exceptions.rb:23:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/common_logger.rb:33:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/chunked.rb:54:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/content_length.rb:15:in `call' /var/www/oddb_rack.org/vendor/bundle/ruby/2.4.0/gems/rack-2.0.3/lib/rack/handler/webrick.rb:86:in `service' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/webrick/httpserver.rb:140:in `service' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/webrick/httpserver.rb:96:in `run' /usr/local/ruby-2.4.0/lib/ruby/2.4.0/webrick/server.rb:290:in `block in start_thread' ODDB::View::Drugs::ResultList::COMPONENTS[[14, 0]] in create(ikscat) ODDB::View::Drugs::ResultComposite::COMPONENTS[[0, 2]] in create(ODDB::View::Drugs::ResultList) ODDB::View::Drugs::Result::COMPONENTS[[0, 2]] in create(content)
There must be a fundamental problem here. Are the indices not loaded/used correctly?
Starting import_daily to see how far we get here. The first error to fix is
/var/www/oddb_rack.org/src/util/oddbapp.rb:1541:in `initialize': unknown keyword: auxiliary (ArgumentError) from /var/www/oddb_rack.org/src/util/job.rb:40:in `new' from /var/www/oddb_rack.org/src/util/job.rb:40:in `run' from jobs/import_daily:12:in `<module:Util>' from jobs/import_daily:11:in `<module:ODDB>' from jobs/import_daily:10:in `<main>'
This was easily fixed via commit Fix starting ODDB::App for jobs
Now I have troubles sending a e-mail:
process: jobs/import_daily init system init system: 4.432897152 setup drb-delegation 2017-06-14 09:20:16 +0200: Latest saved (3407 bytes) as /var/www/oddb_rack.org/data/csv/evidentia_fi_link-2017.06.14.csv and /var/www/oddb_rack.org/data/csv/evidentia_fi_link-latest.csv Delegating evidentia_search_links_hash= Delegating odba_store /var/www/oddb_rack.org/src/util/mail.rb: Configured email using /var/www/oddb_rack.org/etc/oddb.yml @cfg is now "smtp.gmail.com" 587 "ngiger@ywesee.com" Util.log_and_deliver_mail to=["ngiger@ywesee.com"] subject ch.ODDB.org Report - Evidentia_FI_search_links - 06/2017 size 113 with 0 attachments. #<Mail::Body:0x0055ebf54154d8 @boundary=nil, @preamble=nil, @epilogue=nil, @charset="US-ASCII", @part_sort_order=["text/plain", "text/enriched", "text/html"], @parts=[], @raw_source="2017-06-14 09:20:16 +0200 Added 34 search_links from /var/www/oddb_rack.org/data/csv/evidentia_fi_link-latest.csv", @encoding="7bit"> Util.send_mail rescue: error is #<Net::SMTPAuthenticationError: 535-5.7.8 Username and Password not accepted. Learn more at > recipients ["ngiger@ywesee.com"] /var/www/oddb_rack.org/src/util/mail.rb:91:in `send_mail' /var/www/oddb_rack.org/src/util/log.rb:53:in `notify' /var/www/oddb_rack.org/src/util/updater.rb:575:in `update_immediate_with_error_report' /var/www/oddb_rack.org/src/util/updater.rb:397:in `update_evidentia_fi_search_links' /var/www/oddb_rack.org/src/util/updater.rb:205:in `run' jobs/import_daily:13:in `block in <module:Util>' /var/www/oddb_rack.org/src/util/job.rb:40:in `run' jobs/import_daily:12:in `<module:Util>' jobs/import_daily:11:in `<module:ODDB>' jobs/import_daily:10:in `<main>'
This error went away when using admin@ywesee.com as sender for the SMTP-Account.
Corrected an error with Fix auth method for sending stmp mails
Now looking again at the error when following the "SL Neuaufnahmen". Looks like mod_ruby had a method passthru which is not available for rack. Using pry to analyse the situation when we follow http://oddb-ci2.dyndns.org/de/gcc/rss/channel/sl_introduction.rss
From: /home/niklaus/git/sbsm/lib/sbsm/session.rb @ line 436 SBSM::Session#passthru: 434: def passthru(*args) 435: require 'pry'; binding.pry => 436: @request.passthru(*args) 437: end [1] pry(#<ODDB::Session>)> args => ["/var/www/oddb_rack.org/data/rss/de/sl_introduction.rss", "inline"]
Before rack in sbsm the passthru was defined and used as follows in lib/sbsm/request.rb
def passthru(path, disposition='attachment') # the variable @passthru is set by a trusted source @passthru = path.untaint @disposition = disposition '' end <..> drb_process cookie_input = @proxy.cookie_input # view.to_html can call passthru instead of sending data if(@passthru) unless(cookie_input.empty?) cookie = generate_cookie(cookie_input) @request.headers_out.add('Set-Cookie', cookie.to_s) end basename = File.basename(@passthru) fullpath = File.expand_path( @passthru, @request.server.document_root.untaint) subreq = @request.lookup_file(fullpath) @request.content_type = subreq.content_type @request.headers_out.add('Content-Disposition', "#@disposition; filename=#{basename}") @request.headers_out.add('Content-Length', File.size(fullpath).to_s) begin File.open(fullpath) { |fd| @request.send_fd(fd) } rescue Errno::ENOENT, IOError => err @request.log_reason(err.message, @passthru) return Apache::NOT_FOUND end
I had omitted these changes as they were not used by the other applications. Fixed this problem in sbsm.
In the import_daily got errors because the fi-parse daemon was not active. Must fix running sudo -u apache bundle-240 exec ruby-240 ext/fiparse/bin/fiparsed
Got the success reports for
No find the root case of the search problem, I want make bin/admin work to be able to check which functions work fine and which not. Fixed starting bin/admin with commit Add start_service in ODDB::App.new
Now (at least some functions) of bin/admin work as seen by
sudo -u apache /usr/local/bin/bundle-240 exec ruby-240 bin/admin ch.oddb> registrations.size -> 11935 ch.oddb> registrations.first -> ["65908", #<ODBA::Stub:47175066625040#34114601 @odba_class= @odba_container=47175078848120#22>] ch.oddb> registration('62969') -> #<ODDB::Registration:0x007f2bab36dc50> ch.oddb> registration('62969').name_base -> Relvar Ellipta 92/22 mcg
Looks like we have problem when searching the lib/sbsm/session.rb when process_rack_request calls to_html, where the error NoMethodError undefined method `size' for nil:NilClass
is thrown.
Restarting import_daily before working on sandoz.xmlconv. Failed with
/usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:745:in `rescue in block in open': druby://localhost:10005 - #<Errno::ECONNREFUSED: Connection refused - connect(2) for "localhost" port 10005> (DRb::DRbConnError) from /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:739:in `block in open' from /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:738:in `each' from /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:738:in `open' from /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:1248:in `initialize' from /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:1228:in `new' from /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:1228:in `open' from /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:1141:in `block in method_missing' from /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:1160:in `with_friend' from /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:1140:in `method_missing' from /var/www/oddb_rack.org/src/plugin/xls_export.rb:22:in `export_generics' from /var/www/oddb_rack.org/src/util/exporter.rb:157:in `export_generics_xls' from /var/www/oddb_rack.org/src/util/updater.rb:456:in `update_swissmedic_followers' from /var/www/oddb_rack.org/src/util/updater.rb:219:in `run' from jobs/import_daily:13:in `block in <module:Util>' from /var/www/oddb_rack.org/src/util/job.rb:40:in `run' from jobs/import_daily:12:in `<module:Util>' from jobs/import_daily:11:in `<module:ODDB>' from jobs/import_daily:10:in `<main>'
After runnning it a second time (with all ch.oddb* deamons, except crawler) started, I got
ODBA::Stub was unable to replace #13534582 from ODDB::Package:#234513 undefined method `empty?' for nil:NilClass Something is wrong with @sequences of Registration (iksnr = 57061) /var/www/oddb_rack.org/log/job.pid is deleted