【问题标题】:Rails app works on local server but the most important page won't work on HerokuRails 应用程序在本地服务器上运行,但最重要的页面在 Heroku 上无法运行
【发布时间】:2014-09-27 22:09:33
【问题描述】:

我在 Rails 中有一个房间预订项目。我在其中一个页面中遇到了问题,我在其中修复并推送了更改。解决这个问题后,我的主页,新的预订页面,出现了一个只发生在 Heroku 而不是 localhost 的错误。 (很抱歉,出了点问题。)

我看不到它声称的错误。为了解决这个问题,我将 Heroku 回滚到主页正在工作的状态,而我之前修复的页面不是:主页再次工作。然后,我将 Heroku 中的 git 克隆到我的本地机器并重新推送它,没有进行任何更改,但错误再次出现!我与 Heroku Bash 确认服务器上的文件实际上是我推送的。

非常感谢您的帮助!

Heroku 日志中的两个错误:

2014-09-27T21:53:41.455914+00:00 app[web.1]: ActionView::Template::Error (/app/app/views/reservations/new.html.erb:16: syntax error, unexpected keyword_do, expecting keyword_end
2014-09-27T21:53:41.455712+00:00 app[web.1]: /app/app/views/reservations/new.html.erb:28: syntax error, unexpected keyword_ensure, expecting end-of-input):

app/views/reservations/new.html.erb

<div class="row">
  <div class="col-md-3"></div>
  <div class="col-md-6">
    <div class="panel panel-primary radius">
      <div class="panel-heading">
        <h1 class="panel-title text-center" id="reservations_title"><%= t "new_reservation.title" %>:
          <span class="spinner"
                style="display: none; position: relative; top:4px; left:<%= params[:locale]=="en" ? "2px;" : "4px;" %>"
                id="titleSpinner">
          </span>
        </h1>
      </div>
      <div class="panel-body">
        <div class="col-md-12">

          <%= form_for ([@user, @reservation]), remote: true  do |f| %>
              <%= render(:partial => 'form_datetime', locals: { f: f }) %>
              <%= render(:partial => 'shared/notifications', locals: { f: f }) %>
              <%= render(:partial => 'form_rooms', locals: { f: f }) %>
          <% end %>

        </div>
      </div>
    </div>
  </div>
</div>
<%= javascript_include_tag 'reservations' %>

form_datetime

<div class="form-group">
  <span class="glyphicon glyphicon-calendar"></span>
  <%= f.label(:res_date, t("new_reservation.date")) %>
  <%= select_tag(:res_date, options_for_select(generate_reservation_dates(5),params[:res_date]),
                 :class => "form-control") %>

  <span class="glyphicon glyphicon-time"></span>
  <%= f.label(:res_time, t("new_reservation.time")) %>
  <%= select_tag(:res_time, options_for_select(generate_reservation_time(),params[:res_time]),
                 :class => "form-control",
                 :prompt => t("new_reservation.time_prompt")) %>
</div>

form_rooms

<div id="room_container">
  <div class="form-group">
    <%= submit_tag "Show Rooms", :name => "show_rooms", :class => "btn btn-info radius btn-block", :id => "show_rooms" %>
  </div>

  <% if(!params[:res_date].blank? && !params[:res_time].blank?) %>
      <div class="form-group">
        <% rooms_arr = available_rooms_array(params[:res_date],params[:res_time]) %>
        <% if rooms_arr.size == 0 %>
            <div class="alert alert-warning radius">
              <span class="glyphicon glyphicon-exclamation-sign"></span>
              <%= t "new_reservation.no_rooms" %>
            </div>
        <% else %>

            <% rooms_arr.each do |room| %>
                <button value="<%= room.name %>"
                        name="room_name"
                        class="btn btn-primary radius btn-block">
                  <span class="spinner"
                        style="display: none; position: relative; top:5px; left:<%= params[:locale]=="en" ? "8px;" : "11px;" %>"
                        id="buttonSpinner<%= room.name %>">
                  </span>
                  <% if room.contains_grand_piano %>
                    <span class="glyphicon glyphicon-star-empty"></span>
                  <% end %>
                  <%= room.name %>
                </button>
            <% end %>
        <% end %>
      </div>
  <% end %>
</div>

通知

<div class="form-group" id="notifications_container">
  <% if !flash.now.blank? %>
      <% if !flash[:notice].blank? %>
          <div class="alert alert-success radius">
            <span class="glyphicon glyphicon-ok-sign"></span>
            <%= flash.now[:notice].html_safe %>
          </div>
      <% end %>
      <% if !flash[:warning].blank? %>
          <div class="alert alert-warning radius">
            <span class="glyphicon glyphicon-exclamation-sign"></span>
            <%= flash.now[:warning].html_safe %>
          </div>
      <% end %>
      <% if !flash.now[:error].blank? %>
          <div class="alert alert-danger radius">
            <span class="glyphicon glyphicon-remove-sign"></span>
            <%= flash.now[:error].html_safe %>
          </div>
      <% end %>
  <% end %>
</div>

编辑: 我也尝试制作一个新的 Heroku 应用程序 - 这个应用程序也存在错误。我怎样才能弄清楚为什么在 Heroku 的某个回滚中它确实有效?

【问题讨论】:

    标签: ruby-on-rails heroku localhost


    【解决方案1】:

    我怀疑您的错误与资产管道在生产模式下处理您的 Javascript 的方式有关。我建议在生产环境中本地运行,看看是否可以重现问题。

    运行如下代码:

    rake assets:precompile RAILS_ENV=production
    SECRET_KEY_BASE=not_really_random RDS_DB_NAME=myapp_development rails server -e production -p 4000'
    

    然后连接到 localhost:4000 看看你是否重现了问题。

    【讨论】:

      【解决方案2】:

      我找到了问题!

      问题在于 form_for 之后的额外空间:

      <%= form_for ([@user, @reservation]), remote: true  do |f| %>
      

      很难找到,尤其是因为它在本地服务器上工作!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多