首页 > 解决方案 > 为什么 Rails 应用程序没有收到来自 EC2 上的 google drive API 的请求响应,但它在 localhost 中工作?

问题描述

我有一个应用程序调用 Google Drive API 在 Google Drive 文件夹中创建和复制文档,create 方法为每个文件夹生成一个文件夹,Test并创建一个 Google Doc(问题文档)的副本,并将它们放在关联的文件夹中Test(答案)。

在 localhost 中它可以工作并且所有 API 响应都成功到达,但在 EC2 中,对 API 的最后一个请求的响应没有到达。

在应用程序的日志中,请求不会出现,但如果之前的 Google Doc 的成功响应生成(“200”,“HTTP :: Message ... from Google Drive API”)。

# log/production.log

D, [2019-09-07T01:47:11.891256 #12230] DEBUG -- : [3457498a-19dd-4a0a-a326-4dbf47a358c5] Sending HTTP post https://www.googleapis.com/drive/v3/files/1exr3HKLe6IgOZU8I22VZEV4WH24UrKnGOPvmGi8-g2k/copy?fields=id%2CwebViewLink%2Cname
D, [2019-09-07T01:47:14.442112 #12230] DEBUG -- : [3457498a-19dd-4a0a-a326-4dbf47a358c5] 200
D, [2019-09-07T01:47:14.442366 #12230] DEBUG -- : [3457498a-19dd-4a0a-a326-4dbf47a358c5] #<HTTP::Message:0x000055f8e60e6d40 @http_header=#<HTTP::Message::Headers:0x000055f8e60e6d18 @http_version="1.1", @body_size=0, @chunked=false, @request_method="POST", @request_uri=#<Addressable::URI:0x2afc73073d44 URI:https://www.googleapis.com/drive/v3/files/1exr3HKLe6IgOZU8I22VZEV4WH24UrKnGOPvmGi8-g2k/copy?fields=id%2CwebViewLink%2Cname>, @request_query=nil, @request_absolute_uri=nil, @status_code=200, @reason_phrase="OK", @body_type=nil, @body_charset=nil, @body_date=nil, @body_encoding=#<Encoding:UTF-8>, @is_request=false, @header_item=[["Cache-Control", "no-cache, no-store, max-age=0, must-revalidate"], ["Pragma", "no-cache"], ["Expires", "Mon, 01 Jan 1990 00:00:00 GMT"], ["Date", "Sat, 07 Sep 2019 01:47:14 GMT"], ["Vary", "Origin"], ["Vary", "X-Origin"], ["Content-Type", "application/json; charset=UTF-8"], ["Content-Encoding", "gzip"], ["X-Content-Type-Options", "nosniff"], ["X-Frame-Options", "SAMEORIGIN"], ["X-XSS-Protection", "1; mode=block"], ["Server", "GSE"], ["Alt-Svc", "quic=\":443\"; ma=2592000; v=\"46,43,39\""], ["Transfer-Encoding", "chunked"]], @dumped=false>, @peer_cert=#<OpenSSL::X509::Certificate: subject=#<OpenSSL::X509::Name CN=*.googleapis.com,O=Google LLC,L=Mountain View,ST=California,C=US>, issuer=#<OpenSSL::X509::Name CN=GTS CA 1O1,O=Google Trust Services,C=US>, serial=#<OpenSSL::BN:0x000055f8e6101028>, not_before=2019-08-23 10:30:37 UTC, not_after=2019-11-21 10:30:37 UTC>, @http_body=#<HTTP::Message::Body:0x000055f8e60e6ca0 @body="{\n \"id\": \"1qmoh-0cTJTNesh1qmxe97Bm0BpnXlrAng3ul2Ttryn8\",\n \"name\": \"Pregunta 2\",\n \"webViewLink\": \"https://docs.google.com/document/d/1qmoh-0cTJTNesh1qmxe97Bm0BpnXlrAng3ul2Ttryn8/edit?usp=drivesdk\"\n}\n", @size=0, @positions=nil, @chunk_size=nil>, @previous=nil>
D, [2019-09-07T01:47:14.443173 #12230] DEBUG -- : [3457498a-19dd-4a0a-a326-4dbf47a358c5] Success - #<Google::Apis::DriveV3::File:0x000055f8e6100768
 @id="1qmoh-0cTJTNesh1qmxe97Bm0BpnXlrAng3ul2Ttryn8",
 @name="Pregunta 2",
 @web_view_link=
  "https://docs.google.com/document/d/1qmoh-0cTJTNesh1qmxe97Bm0BpnXlrAng3ul2Ttryn8/edit?usp=drivesdk">

D, [2019-09-07T01:47:14.443797 #12230] DEBUG -- : [3457498a-19dd-4a0a-a326-4dbf47a358c5]   ^[[1m^[[35m (0.2ms)^[[0m  ^[[1m^[[35mBEGIN^[[0m
D, [2019-09-07T01:47:14.444924 #12230] DEBUG -- : [3457498a-19dd-4a0a-a326-4dbf47a358c5]   ^[[1m^[[36mAnswer Create (0.4ms)^[[0m  ^[[1m^[[32mINSERT INTO "answers" ("name", "id_google_doc", "gdrive_link", "test_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5, $6) RETURNING "id"^[[0m  [["name", "Pregunta 2"], ["id_google_doc", "1qmoh-0cTJTNesh1qmxe97Bm0BpnXlrAng3ul2Ttryn8"], ["gdrive_link", "https://docs.google.com/document/d/1qmoh-0cTJTNesh1qmxe97Bm0BpnXlrAng3ul2Ttryn8/edit?usp=drivesdk"], ["test_id", 59], ["created_at", "2019-09-07 01:47:14.444031"], ["updated_at", "2019-09-07 01:47:14.444031"]]
D, [2019-09-07T01:47:14.446000 #12230] DEBUG -- : [3457498a-19dd-4a0a-a326-4dbf47a358c5]   ^[[1m^[[35m (0.9ms)^[[0m  ^[[1m^[[35mCOMMIT^[[0m
D, [2019-09-07T01:47:14.446717 #12230] DEBUG -- : [3457498a-19dd-4a0a-a326-4dbf47a358c5] Sending HTTP post https://www.googleapis.com/drive/v3/files/1gtGCWyATlRkCu8yMLOifdPt_F6c2oRRwc2zLUG0HGUc/copy?fields=id%2CwebViewLink%2Cname
  # app/controllers/tests_controller.rb
  # POST /tests
  # POST /tests.json
  def create

    @test = Test.new(test_params)
    @students_course = @test.test_rubric.course.students
    @questions = @test.test_rubric.questions

    if @test.test_rubric.tests.first.present?
      init_drive_service
      @test.test_rubric.tests.each do |old_test|
        @gdrive_service.delete_doc(old_test.id_google)
        old_test.destroy
      end
    end


    respond_to do |format|
      if @students

        init_drive_service
        @root_folder = Folder.find(@test.test_rubric.tests_folder_id)
        @students_course.each do |student_test|
          @test1 = Test.new(test_params)
          @test_folder = new_folder(student_test.dni,@root_folder) #create folder in Google Drive
          @test1.id_google = @test_folder.id_gdrive
          @test1.gdrive_link = @test_folder.gdrive_link
          @test1.student = student_test
          @test1.shared = false
          @test1.save
          @questions.each do |q|
            @test_answer_gdrive = @gdrive_service.copy_doc(q.name, q.id_google_doc, @test_folder.id_gdrive) # ----- HERE CRASH ----
            @answer = Answer.new(name: @test_answer_gdrive.name,
                                 id_google_doc: @test_answer_gdrive.id,
                                 gdrive_link: @test_answer_gdrive.web_view_link)
            @answer.test = @test1
            @answer.save
          end
        end
        format.html { redirect_to evaluaciones_path(curso: @test.test_rubric.course), alert: 'success', notice: @test.test_rubric.name+' - Pruebas generadas exitosamente'}
        format.json { render :show, status: :created, location: @test }
      else
        format.html { render :new }
        format.json { render json: @test.errors, status: :unprocessable_entity }
      end
    end
  end

我是否会超出 Google Drive API 调用限制或@questions.each循环中是否有错误?

标签: ruby-on-railsrubyamazon-ec2google-drive-api

解决方案


推荐阅读