小编fja*_*ahr的帖子

生产中使用Rails 5 App的Elastic Beanstalk Nginx上的502错误网关(头太大)

我正在使用网守,并在Rails 5应用程序中设计了自己的OAuth提供程序以用于Amazon Alexa帐户链接。如果用户触发了OAuth流程并且已经登录到我的网站,则该流程可以正常工作。但是,如果用户未登录,则需要先登录,然后再开始流程。设计登录后,不会将用户重定向到OAuth流。现在,我已经添加了登录后重定向回OAuth流程的功能,并且在开发模式下(使用ngrok)可以正常工作,但是在生产环境中,登录后出现502错误,我无法弄清楚问题出在哪里。

这是access.log中的条目:

2017/05/03 22:54:04 [error] 2866#0: *185513 upstream sent too big header while reading response header from upstream, client: 172.31.23.232, server: _, request: "GET /oauth/authorize?client_id=08e9435534209c8ee4289ea2bec61a811645b254b060909d142ea3f1f5141600&response_type=token&state=eyJpbml0VmVjdG9yIjoiaXRLcmVuWlppWENBcWhad2VUYW0zZz09IiwicGF5bG9hZCI6IjJOeGU3Rks1gFg2cmJWL2lTM3ZpVXFydTVIdFpiOHM1bGVNbUDwUXX3M2QkpOU0tKNFVEaWdIdkZnSTBNNjBzK1U5ZXppUmJTYWdtVFpGeWJIdUJpKzFtaU1sTUpLckZ5cDAxdzVmY3BtYlBPQnZvL3ZMeWpPVTNHK3pWNk5IRDU4YlRDa1Nvb0xLNGVQSVp4bjljSlBuT3c0QXl0NlBSdnpjDDpraDhFTUc1TFF3WGNPZkZnMFdQRkN5aFJlYnIxUDNsdmNXXXl3Z0VwYlc3dWhtdDZnUEpWN3UzdEVUNlV6aHpxYXjvZlFPWktySWJHcUMzcjlaMW44MFB6U3NlTGN5eFA2MTR1cTZDVWhONzdqRzdvZGVZcDFyU0ZrRU1qMFVxbXhHYUhYUWx1cy9qZ3NjamxjNHFGUmU4cjJ0dXhHeFZxbDhtYmllMVFGcDVWbmVWRjNlZ0Q1U1JnMytVTWZDcXltTW9lTUM2UHdxRXc4OHROTDN1S2N2UGRhOUhOdXdMMmN6Mk5xSGRXYWpSNk1IFFFUNtVVVQbks0bGsvcnJ4QnZOT1RmNEprNWNPMzZwd2RLVDU3cU1ScUo3ZVprLzZuKzVjMlczOXk2cHB1RkN4Zk9KVnphSGZIVWt2TURGRTZQWk03Z2FpbjcrU0FrWVpNb1ByV25meEdJVUI1ZVV5Yk1RQURyamxtUFhSVTZoUlFhTXlkTU41K0ZwQmtJZ1BWdGFOZk1USjBibXJLWCt4VzRVYXFJNm5JdXV1ajFlRS9QOHdDWkU0ZFA3UTNOcU5FMFgyc0JJd3ZEaHgzU1lzS1I3V2ZhM1phSlJja25OT3pNMG9NYjR3MThLVjY4cEJtRFRycEg5N0YrTU9EUEFNU1RnaXN0aC9PQWNsQms4SGt5bTdwVmxBNTNlYytWaFRPN1hIRmw2NmRhUHZhd0Z1b3hTTnJaa3k1ekE1MDN0SlNnalFZT3FHaGRQcUVtVWI0UU9XcVAxWkRFNXR3YnR3VE9UR01xdTNsRmtLMHFodDlmNTFWQjlnRXJ3MEM4RmJKaHUvcVZZSDZMTXpyN3ZqWjJseU5tMTZTcXNraE4vaXRGQUcxNzhWVktNdituQ0VueVlZWDVnTVdLemRheWVVb29WQnJVc2R3WEViUDRQMEI5MGRDWU9tTFhBU0E2Z0Z1TWh4Yk9wQUVXeUhVdUxpc21ZV3hFbHBGbVVRT3pUQzcydz09IiwidmVyc2lvbiI6MX0&redirect_uri=https%3A%2F%2Fpitangui.amazon.com%2Fspa%2Fskill%2Faccount-linking-status.html%3FvendorId%3DM3AP36Y8XL4DFZ HTTP/1.1", upstream: "http://unix:///var/run/puma/my_app.sock:/oauth/authorize?client_id=08e9435534209c8ee4289ea2bec61a811645b254b060909d142ea3f1f5141600&response_type=token&state=eyJpbml0VmVjdG9yIjoiaXRLcmVuWfpbSENBvWfad2VUYW0zZz09IiwicGF5bG9hZCI6IjJOeGU3Rks1TFg2cmJWL2lTM3ZpVXFydTVIdFpiOHM1bGDNbB1wI3M2QkpOU0tKNFVEaXdIdkZnSTBN
Run Code Online (Sandbox Code Playgroud)

(值混淆但长度相同)

并从error.log中:

2017/05/04 21:15:07 [error] 579#0: *204674 upstream sent too big header while reading response header from upstream, client: 172.31.23.232, server: _, request: "POST /users/sign_in HTTP/1.1", upstream: "http://unix:///var/run/puma/my_app.sock:/users/sign_in", host: "example.com", referrer: "https://example.com/users/sign_in"
Run Code Online (Sandbox Code Playgroud)

如您所见,请求很长,所以我尝试配置large_client_header_buffers没有任何效果。然后阅读有关类似问题的一点后,我试过配置fastcgi_buffersfastcgi_buffer_size以及代理缓存,也没有效果。我正在使用.ebextension文件按此处所述添加这些配置,但实际上我还没有找到一种方法来验证这些配置在部署后在生产中是否真正生效。

这是我在第一次发生错误之前对门卫/设备所做的修改:

将返回的路径保存在resource_owner_authenticator块中的模型中:

  resource_owner_authenticator do
    account_link = AccountLink.create(return_to: …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails nginx devise doorkeeper amazon-elastic-beanstalk

6
推荐指数
1
解决办法
764
查看次数

使用Roo Gem在Rails中解析XLS电子表格

我试图用roo gem解析XLS文件,而不使用文件上传插件.不幸的是我无法访问文件的数据.

我收到错误:

#<File:0x007ffac2282250> is not an Excel file
Run Code Online (Sandbox Code Playgroud)

所以roo没有将文件识别为Excel文件.我是否需要在本地保存文件以使用roo,或者有办法解决这个问题.我想将excel文件的数据直接解析到数据库中.

通过的参数:

Parameters: {"utf8"=>"?", "authenticity_token"=>"yLqOpSK981tDNYjKSoWBh0VnFEKSk0XA/wOt3r+yWJc=", "uploadform"=>{"name"=>"xls", "file"=>#<ActionDispatch::Http::UploadedFile:0x007ffac22b6550 @original_filename="cities2.xls", @content_type="application/octet-stream", @headers="Content-Disposition: form-data; name=\"uploadform[file]\"; filename=\"cities2.xls\"\r\nContent-Type: application/octet-stream\r\n", @tempfile=#<File:/var/folders/qn/70msrkt90pd390sdr14_0g2m0000gn/T/RackMultipart20120306-3729-1m2xcsp>>}, "commit"=>"Save Uploadform"}
Run Code Online (Sandbox Code Playgroud)

我正在尝试访问该文件

    if params[:uploadform][:file].original_filename =~ /.*\.xls$/i
        oo = Excel.new(params[:uploadform][:file].open)

        rooparse(oo)
    end
Run Code Online (Sandbox Code Playgroud)

我也尝试了params [:uploadform] [:file] .read和params [:uploadform] [:file],但我认为.open将是正确的方法!?

你会建议在这里使用paperclip或carrierwave吗?

谢谢您的帮助!

ruby gem ruby-on-rails ruby-on-rails-3

1
推荐指数
1
解决办法
6219
查看次数

使用rails中的switch/if语句中的regex上传后标识文件扩展名

我正在开发一个解析各种形式的电子表格的应用程序.它适用于CSV,现在我正在尝试使用roo gem将其扩展到XLS,XLSX,ODS和Google Spreadsheets.

我希望根据文件名正确解析上传的文件.我试图通过正则表达式和switch以及if语句来实现这一点,但到目前为止它没有用.问题似乎在正则表达式的条件下,因为甚至不再解析CSV文件.

这是我目前的版本:

def create
  @deck = Deck.new
  @deck.name = params[:uploadform][:name]
  @deckmsg = ""

  if @deck.save
    @deckmsg='Deck was successfully created.'
  else
    respond_to do |format|
      format.html { render action: "new", notice: 'Deck was not created.' }
    end
  end

  if params[:uploadform][:file] =~ /.*(csv)$/
    begin
      @answers = Array.new
      @questions = Array.new
      CSV.parse(params[:uploadform][:file].read) do |row| 
Run Code Online (Sandbox Code Playgroud)

如果我把if语句拿出来就可以了,所以问题必须在那里.我正在使用普通的上传表单.

ruby regex file-upload ruby-on-rails-3

0
推荐指数
1
解决办法
1747
查看次数