在尝试运行Ruby on Rails应用程序时,我在终端中看到以下错误.
HTTP parse error, malformed request (): #<Puma::HttpParserError: Invalid HTTP format, parsing fails.>
2017-03-12 13:10:02 -0400: ENV: {"rack.version"=>[1, 3], "rack.errors"=>#<IO:<STDERR>>, "rack.multithread"=>true, "rack.multiprocess"=>false, "rack.run_once"=>false, "SCRIPT_NAME"=>"", "QUERY_STRING"=>"", "SERVER_PROTOCOL"=>"HTTP/1.1", "SERVER_SOFTWARE"=>"puma 3.4.0 Owl Bowl Brawl", "GATEWAY_INTERFACE"=>"CGI/1.2"}
Run Code Online (Sandbox Code Playgroud)
浏览器错误:
This site can’t provide a secure connection. localhost sent an invalid response. ERR_SSL_PROTOCOL_ERROR*
Run Code Online (Sandbox Code Playgroud)
我尝试了以下内容
我正在使用Rails 5.我想从Word文档(.doc)中获取文本,所以我正在使用此代码
text = nil
MSWordDoc::Extractor.load(file_location) do |ctl00_MainContent_List1_grdData|
text = contents.whole_contents
end
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误.我的Gemfile中有这个gem
gem 'msworddoc-extractor'
Run Code Online (Sandbox Code Playgroud)
要从Word文档中获取内容还需要做些什么?如果我能.docx像文件一样对文件应用相同的代码,那就太好了.doc.
/Users/davea/.rvm/gems/ruby-2.4.0/gems/ruby-ole-1.2.12/lib/ole/support.rb:201: warning: constant ::Fixnum is deprecated
Ole::Storage::FormatError: OLE2 signature is invalid
from /Users/davea/.rvm/gems/ruby-2.4.0/gems/ruby-ole-1.2.12/lib/ole/storage/base.rb:378:in `validate!'
from /Users/davea/.rvm/gems/ruby-2.4.0/gems/ruby-ole-1.2.12/lib/ole/storage/base.rb:370:in `initialize'
from /Users/davea/.rvm/gems/ruby-2.4.0/gems/ruby-ole-1.2.12/lib/ole/storage/base.rb:112:in `new'
from /Users/davea/.rvm/gems/ruby-2.4.0/gems/ruby-ole-1.2.12/lib/ole/storage/base.rb:112:in `load'
from /Users/davea/.rvm/gems/ruby-2.4.0/gems/ruby-ole-1.2.12/lib/ole/storage/base.rb:79:in `initialize'
from /Users/davea/.rvm/gems/ruby-2.4.0/gems/ruby-ole-1.2.12/lib/ole/storage/base.rb:85:in `new'
from /Users/davea/.rvm/gems/ruby-2.4.0/gems/ruby-ole-1.2.12/lib/ole/storage/base.rb:85:in `open'
from /Users/davea/.rvm/gems/ruby-2.4.0/gems/msworddoc-extractor-0.2.0/lib/msworddoc/extractor.rb:11:in `load'
from /Users/davea/Documents/workspace/myproject/app/services/msword_processor_service.rb:12:in `pre_process_data'
from /Users/davea/Documents/workspace/myproject/app/services/abstract_import_service.rb:88:in `process_race_data'
from (irb):2
from /Users/davea/.rvm/gems/ruby-2.4.0@global/gems/railties-5.0.1/lib/rails/commands/console.rb:65:in `start'
from /Users/davea/.rvm/gems/ruby-2.4.0@global/gems/railties-5.0.1/lib/rails/commands/console_helper.rb:9:in `start'
from /Users/davea/.rvm/gems/ruby-2.4.0@global/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:78:in `console'
from /Users/davea/.rvm/gems/ruby-2.4.0@global/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:49:in `run_command!'
from /Users/davea/.rvm/gems/ruby-2.4.0@global/gems/railties-5.0.1/lib/rails/commands.rb:18:in `<top (required)>'
from …Run Code Online (Sandbox Code Playgroud) 在我的 Rails 应用程序中,我有一个负责生成报告的控制器。其中一些报告需要很长时间才能生成,在 Heroku 上超过了 30 秒的限制。在这种情况下,我想在 25 秒后向用户显示通知并取消数据库查询。我最初的想法是使用Timeout.
class ReportsController < ApplicationController
def expensive_report
Timeout.timeout(25) do
@results = ExpensiveQuery.new(params).results
end
rescue Timeout::Error
render action: "timeout"
end
end
Run Code Online (Sandbox Code Playgroud)
超时工作正常,但不会取消相应的查询。在 Rails 控制台中很容易重现
begin
Timeout.timeout(1) do
ActiveRecord::Base.connection.execute("SELECT pg_sleep(10)")
end
rescue Timeout::Error
puts "Timeout"
end
result = ActiveRecord::Base.connection.execute("SELECT 1 AS value")
puts result[0]["value"]
Run Code Online (Sandbox Code Playgroud)
此代码将输出“超时”,然后在线阻塞,result = ActiveRecord::Base.connection.execute("SELECT 1 AS value")直到pg_sleep查询完成。
如何从 Rails 中取消此类查询?我在 Heroku 上托管我的应用程序,因此权限仅限于运行诸如pg_cancel_backend或 之类的命令pg_terminate_backend。