草庐IT

jquery - Rack 抛出 EOFError(错误的内容正文)

coder 2025-07-08 原文

我们使用 Ruby 2.1.2、Rails 3.2.19 和 JQuery 1.11,未使用 Assets 管道(因此未使用 JQuery-ujs,但明确使用相关的 rails.js)。对于大多数用户来说,JQuery 和其他相关的常用插件都是从 Google CDN 中提取的(包括 jquery.form 3.50)。受影响的网络服务器是 Ubuntu 14.04、Nginx 1.6 和 Passenger 4.x。

对于我们生产服务器上大约 10% 的用户(负载似乎无关紧要),我们得到了这样的堆栈转储,主要针对一个 URL,但也有其他 URL:

/gems/rack-1.4.5/lib/rack/multipart/parser.rb:74 in "block in fast_forward_to_first_boundary"
/gems/rack-1.4.5/lib/rack/multipart/parser.rb:72 in "loop"
/gems/rack-1.4.5/lib/rack/multipart/parser.rb:72 in "fast_forward_to_first_boundary"
/gems/rack-1.4.5/lib/rack/multipart/parser.rb:15 in "parse"
/gems/rack-1.4.5/lib/rack/multipart.rb:25 in "parse_multipart"
/gems/rack-1.4.5/lib/rack/request.rb:336 in "parse_multipart"
/gems/rack-1.4.5/lib/rack/request.rb:201 in "POST"
/gems/actionpack-3.2.19/lib/action_dispatch/http/request.rb:237 in "POST"
/gems/actionpack-3.2.19/lib/action_dispatch/http/parameters.rb:10 in "parameters"
/gems/actionpack-3.2.19/lib/action_dispatch/http/filter_parameters.rb:31 in "filtered_parameters"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/rails3/action_controller.rb:31 in "process_action"
/gems/actionpack-3.2.19/lib/abstract_controller/base.rb:121 in "process"
/gems/actionpack-3.2.19/lib/abstract_controller/rendering.rb:45 in "process"
/gems/actionpack-3.2.19/lib/action_controller/metal.rb:203 in "dispatch"
/gems/actionpack-3.2.19/lib/action_controller/metal/rack_delegation.rb:14 in "dispatch"
/gems/actionpack-3.2.19/lib/action_controller/metal.rb:246 in "block in action"
/gems/actionpack-3.2.19/lib/action_dispatch/routing/route_set.rb:73 in "call"
/gems/actionpack-3.2.19/lib/action_dispatch/routing/route_set.rb:73 in "dispatch"
/gems/actionpack-3.2.19/lib/action_dispatch/routing/route_set.rb:36 in "call"
/gems/journey-1.0.4/lib/journey/router.rb:68 in "block in call"
/gems/journey-1.0.4/lib/journey/router.rb:56 in "each"
/gems/journey-1.0.4/lib/journey/router.rb:56 in "call"
/gems/actionpack-3.2.19/lib/action_dispatch/routing/route_set.rb:608 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/rack/error_collector.rb:50 in "traced_call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:55 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/rack/agent_hooks.rb:26 in "traced_call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:55 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/rack/browser_monitoring.rb:23 in "traced_call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:55 in "call"
/gems/oink-0.10.1/lib/oink/middleware.rb:17 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/gems/warden-1.2.3/lib/warden/manager.rb:35 in "block in call"
/gems/warden-1.2.3/lib/warden/manager.rb:34 in "catch"
/gems/warden-1.2.3/lib/warden/manager.rb:34 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/gems/actionpack-3.2.19/lib/action_dispatch/middleware/best_standards_support.rb:17 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/gems/rack-1.4.5/lib/rack/etag.rb:23 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/gems/rack-1.4.5/lib/rack/conditionalget.rb:25 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/gems/actionpack-3.2.19/lib/action_dispatch/middleware/head.rb:14 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/gems/actionpack-3.2.19/lib/action_dispatch/middleware/params_parser.rb:21 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/gems/actionpack-3.2.19/lib/action_dispatch/middleware/flash.rb:242 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/gems/rack-1.4.5/lib/rack/session/abstract/id.rb:210 in "context"
/gems/rack-1.4.5/lib/rack/session/abstract/id.rb:205 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/gems/actionpack-3.2.19/lib/action_dispatch/middleware/cookies.rb:341 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/gems/activerecord-3.2.19/lib/active_record/query_cache.rb:64 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/gems/activerecord-3.2.19/lib/active_record/connection_adapters/abstract/connection_pool.rb:479 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/gems/actionpack-3.2.19/lib/action_dispatch/middleware/callbacks.rb:28 in "block in call"
/gems/activesupport-3.2.19/lib/active_support/callbacks.rb:405 in "_run__3807242266783802268__call__1942732928323145202__callbacks"
/gems/activesupport-3.2.19/lib/active_support/callbacks.rb:405 in "__run_callback"
/gems/activesupport-3.2.19/lib/active_support/callbacks.rb:385 in "_run_call_callbacks"
/gems/activesupport-3.2.19/lib/active_support/callbacks.rb:81 in "run_callbacks"
/gems/actionpack-3.2.19/lib/action_dispatch/middleware/callbacks.rb:27 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/gems/rack-1.4.5/lib/rack/sendfile.rb:102 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/gems/actionpack-3.2.19/lib/action_dispatch/middleware/remote_ip.rb:31 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/gems/actionpack-3.2.19/lib/action_dispatch/middleware/debug_exceptions.rb:16 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/gems/actionpack-3.2.19/lib/action_dispatch/middleware/show_exceptions.rb:56 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/gems/railties-3.2.19/lib/rails/rack/logger.rb:32 in "call_app"
/gems/railties-3.2.19/lib/rails/rack/logger.rb:18 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/gems/actionpack-3.2.19/lib/action_dispatch/middleware/request_id.rb:22 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/gems/rack-1.4.5/lib/rack/methodoverride.rb:21 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/gems/rack-1.4.5/lib/rack/runtime.rb:17 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/gems/activesupport-3.2.19/lib/active_support/cache/strategy/local_cache.rb:72 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/gems/rack-1.4.5/lib/rack/lock.rb:15 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/gems/rack-cache-1.2/lib/rack/cache/context.rb:136 in "forward"
/gems/rack-cache-1.2/lib/rack/cache/context.rb:245 in "fetch"
/gems/rack-cache-1.2/lib/rack/cache/context.rb:185 in "lookup"
/gems/rack-cache-1.2/lib/rack/cache/context.rb:66 in "call!"
/gems/rack-cache-1.2/lib/rack/cache/context.rb:51 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/gems/railties-3.2.19/lib/rails/engine.rb:484 in "call"
/gems/railties-3.2.19/lib/rails/application.rb:231 in "call"
/gems/railties-3.2.19/lib/rails/railtie/configurable.rb:30 in "method_missing"
/gems/rack-1.4.5/lib/rack/urlmap.rb:64 in "block in call"
/gems/rack-1.4.5/lib/rack/urlmap.rb:49 in "each"
/gems/rack-1.4.5/lib/rack/urlmap.rb:49 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/gems/sass-3.2.19/lib/sass/plugin/rack.rb:54 in "call"
/gems/newrelic_rpm-3.9.3.241/lib/new_relic/agent/instrumentation/middleware_tracing.rb:57 in "call"
/var/www/.rvm/gems/ruby-2.1.2/gems/passenger-4.0.45/lib/phusion_passenger/rack/thread_handler_extension.rb:74 in "process_request"
/var/www/.rvm/gems/ruby-2.1.2/gems/passenger-4.0.45/lib/phusion_passenger/request_handler/thread_handler.rb:141 in "accept_and_process_next_request"
/var/www/.rvm/gems/ruby-2.1.2/gems/passenger-4.0.45/lib/phusion_passenger/request_handler/thread_handler.rb:109 in "main_loop"
/var/www/.rvm/gems/ruby-2.1.2/gems/passenger-4.0.45/lib/phusion_passenger/request_handler.rb:448 in "block (3 levels) in start_threads"

在从 1.5(!) 升级到 JQuery 1.11 之前,这个错误没有发生(或者即使发生了,也非常罕见)。到目前为止,我们无法在我们的登台服务器或开发环境中重现此错误。支持人员在生产环境中看到过一次(我试过几次),但无法在暂存环境中复制(这与生产环境相同,但资源较少)。 JQuery migrate 在运行时没有显示任何问题,正如我所说,它似乎适用于大多数用户;在调试 session 期间似乎没有任何问题。操作系统/平台或浏览器没有明显的模式(尝试在多个平台上重现并且日志没有表明模式,但很难筛选到足以确定)。涉及的主要 URL 用于表单 Controller 上的#new 操作。我们在平台中还有其他几种形式,它们没有显示任何问题。

因为我无法重现它,所以无法提供代码片段——我不知道要指出什么。

到目前为止,我对错误的解释(基于堆栈转储中的第一行)是以下三件事之一:

  1. 内容在其他方面是正确的,但不知何故不完整,
  2. 内容格式不正确,表明存在 Ruby 错误(尽管 也许是 JS)
  3. 错误的编码(我在 Ruby 中使用 form_for,甚至 将“multipart: true”投入明确)

我看到 Rack 在 4.x 中处理了一个相关的多部分 EOFError 问题,但我们正在运行 Rails 3.2.19,这将我们锁定在旧版本并且升级到 Rails 4.x 目前不切实际。作为测试,我尝试将 JQuery 恢复到 1.7,但似乎没有改变行为(任何旧版本,我不得不放弃 JQuery 1.8+ 所需的代码更新)。

由于 JQuery 代码需要更改我们的 JS,我怀疑我错过了一些必要的 JS 更改,但似乎没有什么不妥。附近还有一些 CSS 更改,但我看不出这会对事情产生什么影响(因为一切都在我们的各种测试环境中通过,其他更改也包含在部署中)。

我主要怀疑 JS 问题,但一些有限的生产测试(我必须在实时服务器上小心,所以不能太激进)没有显示任何线索或抛出任何似乎相关的错误。

作为背景,我有大约一年的 Ruby 和 JS 经验(尽管在其他编程平台上有更多年的经验)所以这完全有可能是我不熟悉的基本知识。

我很难缩小关注的范围来处理这个问题。任何诊断或解决的建议?

更新 (10/11/14) 我猴子修补了 Rack::Multipart::Parser.fast_forward_to_first_boundary(感谢 Isaac Betesh!)以添加日志跟踪并确认传递给解析器的内容在到达该函数时为空(即,在多部分解析期间 @env['rack.input'] 引用的 StringIO 不返回任何数据)。我现在的理论是,当没有数据时,它会错误地期望多部分数据。同样,这只会间歇性地发生,并且可以很好地解析同一页面的许多其他调用。由于我们在 Passenger 4.x 和 Nginx 下运行,我没有排除缓冲问题。

最佳答案

这终于解决了,我发布了发生的事情,以防对其他人有帮助。

总结 原始代码在 JS 中包含一个 ajaxSubmit(通过 jquery.form 插件),它提交了一个带有 multipart/form-data 编码的表单(作为 POST)(到目前为止还不错)。处理提交的 Rails Controller 正常处理数据,然后重定向到第二个 href(作为 GET)。浏览器(可能在返回到它的成功 回调处理程序之前仍在通过 jquery.form 插件进行处理)接收到重定向并保留 multipart/form-data 编码类型。当 rack 收到仍然指定了多部分编码的 GET 时,它会犹豫,因为没有要解析的多部分数据。

抱歉,我的 OP 中没有体现其中的大部分内容。我不清楚为什么这在旧版本的 JQuery 和 JQuery.form 插件下有效,或者为什么它有时在新的 JQuery/JQuery.form 下成功。

解决方案 重构 Controller 以不再重定向,而是为原始 ajaxSubmit 的 success 回调处理程序返回一个 URL(作为文本呈现)。 success 处理程序现在对返回的 URL 执行 AJAX GET,从而使工作流保持完整,但避免对 GET 请求进行任何多部分编码。

tl;dr :

在代码被更改之前,我们有一个涉及 Jquery.form 的路径,它是这样的(代码示例并不意味着可执行,而只是为了说明):

Ruby View (在 HAML 中提交的表单):

= form_for @someObject, html: {:multipart => true, :class => "someformclass"} do |f|
  = f.error_messages
  = hidden_field_tag :submitted, true
  =# some more fields
  %p.submits
    = f.submit "Submit", class: "submit"

Ruby Controller :

class OurController < ApplicationController
  layout false
  before_filter :authenticate_user!

  # some other actions

  def create
    # some processing

    someObject.save
    redirect_to new_feedback_path, :method => :get, :notice => "notice text", status: 303
  end

  # some other actions
end

JS:

$(document).on('click', '.someformclass .submit', function() {
  ...
  $(this).parents('form').ajaxSubmit({     // uses jquery.form
    ...
    beforeSubmit: function(someargs) {
      ... blah blah
    },
    success: function(responseText) {
      // ... code to display flash message
      if (typeof(window.history.pushState) == 'function') {
        window.history.pushState('html', 'sometext', $.cookie('current_url'));
        matchFiltersClass(window.location.pathname);
      } else {
        window.location.hash = '#!' + $.cookie('current_path');
        matchFiltersClass($.cookie('current_path'));
      }
      $('#main_content').html(responseText);
    }
  });
  return false;
});

这被重构如下(同样,只是一个例子):

Ruby View (提交的表单在 HAML 中):未更改

Ruby Controller :

class OurController < ApplicationController
  layout false
  before_filter :authenticate_user!

  # some other actions

  def create
    # some processing

    someObject.save
    flash[:notice] = 'notice text'    # NEW LINE
    render text: new_feedback path, status: accepted  #CHANGED LINE
  end

  # some other actions
end

JS:

$(document).on('click', '.someformclass .submit', function() {
  ...
  $(this).parents('form').ajaxSubmit({     // uses jquery.form
    ...
    beforeSubmit: function(someargs) {
      ... blah blah
    },
    success: function(responseText) {
      // ... code to display flash message
      $.get(responseText, function(data) {       // NEW LINE
        if (typeof(window.history.pushState) == 'function') {
          window.history.pushState('html', 'sometext', $.cookie('current_url'));
          matchFiltersClass(window.location.pathname);
        } else {
          window.location.hash = '#!' + $.cookie('current_path');
          matchFiltersClass($.cookie('current_path'));
        }
        $('#main_content').html(responseText);
      });       // NEW LINE
    }
  });
  return false;
});

这个解决方案是在本地开发人员的帮助下找到的(感谢 Dan Axtman!),并且在 Rack 中使用猴子补丁日志记录时也有相当多的时间(感谢 Isaac Betesh!)。至少我在这个过程中学到了一些关于 Rack 和 monkey patching 的知识......

关于jquery - Rack 抛出 EOFError(错误的内容正文),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25874529/

有关jquery - Rack 抛出 EOFError(错误的内容正文)的更多相关文章

  1. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  2. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  3. ruby - 将数组的内容转换为 int - 2

    我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]

  4. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  5. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  6. ruby-on-rails - 如何在 Rails View 上显示错误消息? - 2

    我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c

  7. 使用 ACL 调用 upload_file 时出现 Ruby S3 "Access Denied"错误 - 2

    我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file

  8. ruby-on-rails - 错误 : Error installing pg: ERROR: Failed to build gem native extension - 2

    我克隆了一个rails仓库,我现在正尝试捆绑安装背景:OSXElCapitanruby2.2.3p173(2015-08-18修订版51636)[x86_64-darwin15]rails-v在您的Gemfile中列出的或native可用的任何gem源中找不到gem'pg(>=0)ruby​​'。运行bundleinstall以安装缺少的gem。bundleinstallFetchinggemmetadatafromhttps://rubygems.org/............Fetchingversionmetadatafromhttps://rubygems.org/...Fe

  9. ruby - #之间? Cooper 的 *Beginning Ruby* 中的错误或异常 - 2

    在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee

  10. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

随机推荐