ruby-on-rails - 为什么 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
循环中是否有错误?
解决方案
推荐阅读
- java - 将数据字符串转换为 JSON 对象的最佳方法
- ansible - Ansible任务中“shell:>”中“>”的目的是什么?
- macos - Docker Mac - 在大目录上运行 ls 时出错
- javascript - 无法将变量传递给元素样式道具 React
- c# - Xunit - 即使在设置之后,Moq 也总是返回空值
- javascript - 语法错误:未知词顺风导入语句不起作用
- reactjs - 如何使用 GQL 从 React 前端的 Apollo 客户端获取错误
- django - 在模板中显示字段但不允许对其进行编辑(Django)
- c# - 如何使用 Autofac 注册 NodaTime.ZonedClock
- electron - 我们可以将电子应用程序部署到dll吗?