Rails Heroku Postgres JavaScript按钮操作仅适用于多次点击

时间:2014-02-27 03:46:13

标签: javascript ruby-on-rails heroku database-performance heroku-postgres

我有一个lorem ipsum生成器Rails App运行4.0.2,Ruby 2.1.0。该应用程序在开发中运行良好,但在部署到Heroku之后,按钮单击无法在第一次单击时工作时出现问题。在开发过程中,它可以处理20+以上的查询,但是在生产中它似乎被卡在高于5段的任何内容上。

按钮操作会在每次失败的点击时呈现具有200状态的submit.js.erb,直到最终使用其他点击为止。由于它在开发中工作正常,我认为它可能是Postgres查询模型调用的结构问题。

任何想法或建议都会非常感激。该应用程序目前部署在:

http://blooming-refuge-1066.herokuapp.com/

index.html.erb上的表格

    <%= form_tag "/submit", remote: true do %>
    <div class="form">
      <table>
        <tbody>
          <tr>
            <div class="field">
            <td><p class="question">HOW MANY PARAGRAPHS?</p></td>
            <td><%= text_field_tag :paragraph_count, 1, {style: "width: 40px;", maxvalue: "10" } %></td>
            </div>
    <div class="actions">
          <%= submit_tag "Serenity Now", class: "btn btn-custom btn-lg", id: "buttnow" %>
        </div>

routes.rb文件

      resources :homes
      root to: 'homes#index'
      post '/submit', to: 'homes#submit'
      resources :paragraphs

controller.rb文件

      def submit
        limit = params[:paragraph_count].to_i
        @paragraphs = Paragraph.pluck(:description).shuffle[0...limit]

        respond_to do |format|
          format.js
        end
      end

submit.js.erb文件

    $('#koanz').html("<p><%= @paragraphs.join('</p><p>').html_safe %></p>").show();

Heroku在多次点击后记录

            2014-02-27T03:25:45.933357+00:00 app[web.1]: Started POST "/submit" for 50.149.115.166 at 2014-02-27 03:25:45 +0000
    2014-02-27T03:25:45.935086+00:00 app[web.1]:   Parameters: {"utf8"=>"✓", "paragraph_count"=>"5"}
    2014-02-27T03:25:45.935086+00:00 app[web.1]:   Parameters: {"utf8"=>"✓", "paragraph_count"=>"5"}
    2014-02-27T03:25:45.935086+00:00 app[web.1]: Processing by HomesController#submit as JS
    2014-02-27T03:25:45.933357+00:00 app[web.1]: Started POST "/submit" for 50.149.115.166 at 2014-02-27 03:25:45 +0000
    2014-02-27T03:25:45.935086+00:00 app[web.1]: Processing by HomesController#submit as JS
    2014-02-27T03:25:45.956141+00:00 app[web.1]: Completed 200 OK in 21ms (Views: 3.3ms | ActiveRecord: 13.4ms)
    2014-02-27T03:25:45.955920+00:00 app[web.1]:   Rendered homes/submit.js.erb (0.9ms)
    2014-02-27T03:25:45.955920+00:00 app[web.1]:   Rendered homes/submit.js.erb (0.9ms)
    2014-02-27T03:25:45.956141+00:00 app[web.1]: Completed 200 OK in 21ms (Views: 3.3ms | ActiveRecord: 13.4ms)
    2014-02-27T03:25:46.017862+00:00 heroku[router]: at=info method=POST path=/submit host=blooming-refuge-1066.herokuapp.com request_id=c235c25b-ebb6-432f-8c82-2eb10c435678 fwd="50.149.115.166" dyno=web.1 connect=3ms service=90ms status=200 bytes=3085
    2014-02-27T03:25:48.061798+00:00 app[web.1]: Started POST "/submit" for 50.149.115.166 at 2014-02-27 03:25:48 +0000
    2014-02-27T03:25:48.061798+00:00 app[web.1]: Started POST "/submit" for 50.149.115.166 at 2014-02-27 03:25:48 +0000
    2014-02-27T03:25:48.063252+00:00 app[web.1]: Processing by HomesController#submit as JS
    2014-02-27T03:25:48.063252+00:00 app[web.1]:   Parameters: {"utf8"=>"✓", "paragraph_count"=>"5"}
    2014-02-27T03:25:48.063252+00:00 app[web.1]: Processing by HomesController#submit as JS
    2014-02-27T03:25:48.069377+00:00 app[web.1]:   Rendered homes/submit.js.erb (0.1ms)
    2014-02-27T03:25:48.069588+00:00 app[web.1]: Completed 200 OK in 6ms (Views: 0.6ms | ActiveRecord: 3.9ms)
    2014-02-27T03:25:48.069377+00:00 app[web.1]:   Rendered homes/submit.js.erb (0.1ms)
    2014-02-27T03:25:48.063497+00:00 app[web.1]:   Parameters: {"utf8"=>"✓", "paragraph_count"=>"5"}
    2014-02-27T03:25:48.069588+00:00 app[web.1]: Completed 200 OK in 6ms (Views: 0.6ms | ActiveRecord: 3.9ms)
    2014-02-27T03:25:49.138997+00:00 app[web.1]: Started POST "/submit" for 50.149.115.166 at 2014-02-27 03:25:49 +0000
    2014-02-27T03:25:49.143518+00:00 app[web.1]: Processing by HomesController#submit as JS
    2014-02-27T03:25:49.157302+00:00 heroku[router]: at=info method=POST path=/submit host=blooming-refuge-1066.herokuapp.com request_id=1b726361-d376-4924-ac27-6d368ebdf631 fwd="50.149.115.166" dyno=web.1 connect=4ms service=21ms status=200 bytes=2431
    2014-02-27T03:25:49.138997+00:00 app[web.1]: Started POST "/submit" for 50.149.115.166 at 2014-02-27 03:25:49 +0000
    2014-02-27T03:25:49.143518+00:00 app[web.1]:   Parameters: {"utf8"=>"✓", "paragraph_count"=>"5"}
    2014-02-27T03:25:49.143518+00:00 app[web.1]: Processing by HomesController#submit as JS
    2014-02-27T03:25:49.143518+00:00 app[web.1]:   Parameters: {"utf8"=>"✓", "paragraph_count"=>"5"}
    2014-02-27T03:25:49.153074+00:00 app[web.1]:   Rendered homes/submit.js.erb (0.1ms)
    2014-02-27T03:25:49.153074+00:00 app[web.1]:   Rendered homes/submit.js.erb (0.1ms)
    2014-02-27T03:25:49.153222+00:00 app[web.1]: Completed 200 OK in 10ms (Views: 0.7ms | ActiveRecord: 7.5ms)
    2014-02-27T03:25:49.153222+00:00 app[web.1]: Completed 200 OK in 10ms (Views: 0.7ms | ActiveRecord: 7.5ms)
    2014-02-27T03:25:50.279112+00:00 app[web.1]: Started POST "/submit" for 50.149.115.166 at 2014-02-27 03:25:50 +0000
    2014-02-27T03:25:50.302745+00:00 app[web.1]: Started POST "/submit" for 50.149.115.166 at 2014-02-27 03:25:50 +0000
    2014-02-27T03:25:50.308782+00:00 app[web.1]: Processing by HomesController#submit as JS
    2014-02-27T03:25:50.365665+00:00 app[web.1]:   Rendered homes/submit.js.erb (0.1ms)
    2014-02-27T03:25:50.342596+00:00 app[web.1]: Processing by HomesController#submit as JS
    2014-02-27T03:25:50.342934+00:00 app[web.1]:   Parameters: {"utf8"=>"✓", "paragraph_count"=>"5"}
    2014-02-27T03:25:50.342811+00:00 app[web.1]:   Parameters: {"utf8"=>"✓", "paragraph_count"=>"5"}
    2014-02-27T03:25:50.435740+00:00 app[web.1]: Completed 200 OK in 91ms (Views: 69.1ms | ActiveRecord: 19.8ms)
    2014-02-27T03:25:50.434368+00:00 app[web.1]: Completed 200 OK in 91ms (Views: 69.1ms | ActiveRecord: 19.8ms)
    2014-02-27T03:25:50.433489+00:00 app[web.1]:   Rendered homes/submit.js.erb (0.1ms)
    2014-02-27T03:25:51.164082+00:00 app[web.1]: Started POST "/submit" for 50.149.115.166 at 2014-02-27 03:25:51 +0000
    2014-02-27T03:25:51.164082+00:00 app[web.1]: Started POST "/submit" for 50.149.115.166 at 2014-02-27 03:25:51 +0000
    2014-02-27T03:25:51.165062+00:00 app[web.1]: Processing by HomesController#submit as JS
    2014-02-27T03:25:51.165062+00:00 app[web.1]: Processing by HomesController#submit as JS
    2014-02-27T03:25:51.165062+00:00 app[web.1]:   Parameters: {"utf8"=>"✓", "paragraph_count"=>"5"}
    2014-02-27T03:25:51.185743+00:00 heroku[router]: at=info method=POST path=/submit host=blooming-refuge-1066.herokuapp.com request_id=840bd593-2bb9-4126-907c-f09443a10695 fwd="50.149.115.166" dyno=web.1 connect=0ms service=39ms status=200 bytes=3025
    2014-02-27T03:25:51.179108+00:00 app[web.1]: Completed 200 OK in 8ms (Views: 0.9ms | ActiveRecord: 5.6ms)
    2014-02-27T03:25:51.179067+00:00 app[web.1]: Completed 200 OK in 8ms (Views: 0.9ms | ActiveRecord: 5.6ms)
    2014-02-27T03:25:51.170996+00:00 app[web.1]:   Parameters: {"utf8"=>"✓", "paragraph_count"=>"5"}
    2014-02-27T03:25:51.178856+00:00 app[web.1]:   Rendered homes/submit.js.erb (0.1ms)
    2014-02-27T03:25:51.178678+00:00 app[web.1]:   Rendered homes/submit.js.erb (0.1ms)
    2014-02-27T03:25:51.533809+00:00 heroku[router]: at=info method=POST path=/submit host=blooming-refuge-1066.herokuapp.com request_id=57abc2d7-5e73-4bf2-a875-1347fa37ed32 fwd="50.149.115.166" dyno=web.1 connect=0ms service=25ms status=200 bytes=2167
    2014-02-27T03:25:51.519012+00:00 app[web.1]: Started POST "/submit" for 50.149.115.166 at 2014-02-27 03:25:51 +0000
    2014-02-27T03:25:51.521359+00:00 app[web.1]: Started POST "/submit" for 50.149.115.166 at 2014-02-27 03:25:51 +0000
    2014-02-27T03:25:51.522698+00:00 app[web.1]: Processing by HomesController#submit as JS
    2014-02-27T03:25:51.523888+00:00 app[web.1]: Processing by HomesController#submit as JS
    2014-02-27T03:25:51.523972+00:00 app[web.1]:   Parameters: {"utf8"=>"✓", "paragraph_count"=>"5"}
    2014-02-27T03:25:51.524046+00:00 app[web.1]:   Parameters: {"utf8"=>"✓", "paragraph_count"=>"5"}
    2014-02-27T03:25:51.531096+00:00 app[web.1]:   Rendered homes/submit.js.erb (0.1ms)
    2014-02-27T03:25:51.531385+00:00 app[web.1]: Completed 200 OK in 7ms (Views: 0.8ms | ActiveRecord: 4.9ms)
    2014-02-27T03:25:51.531385+00:00 app[web.1]: Completed 200 OK in 7ms (Views: 0.8ms | ActiveRecord: 4.9ms)
    2014-02-27T03:25:51.531096+00:00 app[web.1]:   Rendered homes/submit.js.erb (0.1ms)
    2014-02-27T03:25:51.867868+00:00 app[web.1]: Started POST "/submit" for 50.149.115.166 at 2014-02-27 03:25:51 +0000
    2014-02-27T03:25:51.867868+00:00 app[web.1]: Started POST "/submit" for 50.149.115.166 at 2014-02-27 03:25:51 +0000
    2014-02-27T03:25:51.879393+00:00 heroku[router]: at=info method=POST path=/submit host=blooming-refuge-1066.herokuapp.com request_id=76c566ff-400a-40fa-8b01-c1e988cfc132 fwd="50.149.115.166" dyno=web.1 connect=0ms service=20ms status=200 bytes=2788
    2014-02-27T03:25:51.869165+00:00 app[web.1]: Processing by HomesController#submit as JS
    2014-02-27T03:25:51.869165+00:00 app[web.1]:   Parameters: {"utf8"=>"✓", "paragraph_count"=>"5"}
    2014-02-27T03:25:51.869165+00:00 app[web.1]:   Parameters: {"utf8"=>"✓", "paragraph_count"=>"5"}
    2014-02-27T03:25:51.869165+00:00 app[web.1]: Processing by HomesController#submit as JS
    2014-02-27T03:25:51.879542+00:00 app[web.1]:   Rendered homes/submit.js.erb (0.6ms)
    2014-02-27T03:25:51.879542+00:00 app[web.1]: Completed 200 OK in 9ms (Views: 1.8ms | ActiveRecord: 2.3ms)
    2014-02-27T03:25:51.879542+00:00 app[web.1]:   Rendered homes/submit.js.erb (0.6ms)
    2014-02-27T03:25:51.879542+00:00 app[web.1]: Completed 200 OK in 9ms (Views: 1.8ms | ActiveRecord: 2.3ms)
    2014-02-27T03:25:52.012890+00:00 app[web.1]: Started POST "/submit" for 50.149.115.166 at 2014-02-27 03:25:52 +0000
    2014-02-27T03:25:52.012890+00:00 app[web.1]: Started POST "/submit" for 50.149.115.166 at 2014-02-27 03:25:52 +0000
    2014-02-27T03:25:52.014468+00:00 app[web.1]: Processing by HomesController#submit as JS
    2014-02-27T03:25:52.014468+00:00 app[web.1]: Processing by HomesController#submit as JS
    2014-02-27T03:25:52.014468+00:00 app[web.1]:   Parameters: {"utf8"=>"✓", "paragraph_count"=>"5"}
    2014-02-27T03:25:52.014468+00:00 app[web.1]:   Parameters: {"utf8"=>"✓", "paragraph_count"=>"5"}
    2014-02-27T03:25:52.018213+00:00 app[web.1]:   Rendered homes/submit.js.erb (0.1ms)
    2014-02-27T03:25:52.018173+00:00 app[web.1]:   Rendered homes/submit.js.erb (0.1ms)
    2014-02-27T03:25:52.018492+00:00 app[web.1]: Completed 200 OK in 4ms (Views: 0.6ms | ActiveRecord: 1.8ms)
    2014-02-27T03:25:52.018415+00:00 app[web.1]: Completed 200 OK in 4ms (Views: 0.6ms | ActiveRecord: 1.8ms)
    2014-02-27T03:25:37.884064+00:00 heroku[router]: at=info method=GET path=/ host=blooming-refuge-1066.herokuapp.com request_id=9920cd7f-26f9-4805-9741-569786279471 fwd="50.149.115.166" dyno=web.1 connect=9ms service=101ms status=200 bytes=6213

2 个答案:

答案 0 :(得分:0)

当您多次加载相同的javascript文件时,通常会发生此类错误。确保jquery_ujs和jquery只加载一次。

答案 1 :(得分:0)

这导致随机出现双重提交的原因是一些生产段落包含特殊字符引号和一些额外的返回空格。这些导致javascript在submit.js.erb中中断。为了解决这个问题,submit.js.erb被修改了。

    $('#koanz').html("<p><%= @paragraphs.map{|x| html_escape(x.gsub(/\n/, ''))}.join('</p><p>').html_safe %></p>").show();