【问题标题】:Heroku pipeline - identical code on staging & production but production breaksHeroku 管道 - 暂存和生产的相同代码,但生产中断
【发布时间】:2016-08-05 19:13:50
【问题描述】:

我是 Rails(和 Heroku)的新手,并且一直在使用管道进行部署。我假设这两种环境是相同的 - 我使用一种用于暂存,另一种用于部署。

暂存工作完美,但在将代码提升到生产环境时它会中断。这个文件似乎是问题所在,但我不明白为什么 - 有什么想法吗?

<div class="row invite-friends" data-page-id-invite-friend=''>
  <div class="col-lg-3">
    <%= render 'shared/user_info'%>
  </div>
  <div class="col-lg-6 well">
    <h3>Plans</h3>
    <p>Choose a plan to help you reach your goals. All plans deliver structured content from our team of experienced trainers to your feed every day.</p>
    <hr />
    


<div id="accordion" role="tablist" aria-multiselectable="true">
  
<% @diets.each do |diet| %> 

    <div class="panel panel-default">
    <div class="panel-heading" role="tab" id="heading<%=diet.id%>">
      <h4 class="panel-title">
        <a data-toggle="collapse" data-parent="#accordion" href="#collapse<%=diet.id%>" aria-expanded="true" aria-controls="collapse<%=diet.id%>">
          <%= diet.title%> <span class="caret"></span>
           </a>
      </h4>
          <div class="plans_meta"> 
            Rating: <%= content_with_emoji( "????" * diet.rating.to_i) %>
            <br>
            Difficulty: <%= content_with_emoji("????" * diet.difficulty.to_i) %>
            <br>
            Duration: <%= diet.duration %> days.
            <br>
            Trainer: <%= diet.user.name %>
            <br>
            Cost: <%= diet.cost %>$
            <br>
          </div> 
    </div>
    <div id="collapse<%=diet.id%>" class="panel-collapse collapse " role="tabpanel" aria-labelledby="heading<%=diet.id%>">
      <style>.embed-container { position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; } .embed-container iframe, .embed-container object, .embed-container embed { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }</style><div class='embed-container'><iframe src='<%= diet.introvid%>' frameborder='0' webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></div>
         <div class="plans_subscribe"> 
          <button type="button" class="btn btn-success btn-block">Subscribe</button>
        </div>
    </div>
  </div>






<% end %>

</div>

  </div>
  <div class="col-lg-3">
    <%= render 'shared/links' %>
  </div>
</div>

正如我所说,完全相同的代码在管道中的暂存应用程序中的 heroku 上运行,而不是在推送到生产环境时。我已经迁移了数据库。

日志显示如下:

2016-08-05T19:34:45.767820+00:00 app[web.1]:     29:             <br>
2016-08-05T19:34:45.767817+00:00 app[web.1]: 
2016-08-05T19:34:45.767819+00:00 app[web.1]: ActionView::Template::Error (undefined method `name' for nil:NilClass):
2016-08-05T19:34:45.767822+00:00 app[web.1]:     32:             Cost: <%= diet.cost %>$
2016-08-05T19:34:45.767820+00:00 app[web.1]:     28:             Duration: <%= diet.duration %> days.
2016-08-05T19:34:45.767824+00:00 app[web.1]: 
2016-08-05T19:35:24.555153+00:00 heroku[router]: at=info method=GET path="/show_plans" host=www.myfitstat.com request_id=0e9ecc65-d9ba-4805-89af-802f804186e2 fwd="81.101.122.253" dyno=web.1 connect=0ms service=82ms status=500 bytes=1754
2016-08-05T19:35:24.436197+00:00 app[web.1]: Started GET "/show_plans" for 81.101.122.253 at 2016-08-05 20:35:24 +0100
2016-08-05T19:35:24.438213+00:00 app[web.1]: Processing by HomeController#show_plans as HTML
2016-08-05T19:35:24.440544+00:00 app[web.1]:   [1m[36mUser Load (1.4ms)[0m  [1mSELECT  "users".* FROM "users"  WHERE "users"."id" = 3  ORDER BY "users"."id" ASC LIMIT 1[0m
2016-08-05T19:35:24.443086+00:00 app[web.1]:   [1m[35mGroup Load (1.3ms)[0m  SELECT "groups".* FROM "groups" INNER JOIN "groups_users" ON "groups"."id" = "groups_users"."group_id" WHERE "groups_users"."user_id" = $1  [["user_id", 3]]
2016-08-05T19:35:24.444528+00:00 app[web.1]:   Rendered shared/_avatar.html.erb (0.5ms)
2016-08-05T19:35:24.446110+00:00 app[web.1]:   [1m[36mGroup Load (1.1ms)[0m  [1mSELECT  "groups".* FROM "groups"  WHERE "groups"."id" = $1 LIMIT 1[0m  [["id", 6]]
2016-08-05T19:35:24.447802+00:00 app[web.1]:   [1m[35m (1.0ms)[0m  SELECT COUNT(*) FROM "weights"  WHERE "weights"."user_id" = $1  [["user_id", 3]]
2016-08-05T19:35:24.448169+00:00 app[web.1]:   Rendered shared/_user_info.html.erb (4.4ms)
2016-08-05T19:35:24.449524+00:00 app[web.1]:   [1m[36mDiet Load (1.1ms)[0m  [1mSELECT "diets".* FROM "diets"[0m
2016-08-05T19:35:24.512148+00:00 app[web.1]:   Rendered home/show_plans.html.erb within layouts/application (68.4ms)
2016-08-05T19:35:24.513300+00:00 app[web.1]: ActionView::Template::Error (undefined method `name' for nil:NilClass):
2016-08-05T19:35:24.513301+00:00 app[web.1]:     27:             <br>
2016-08-05T19:35:24.513301+00:00 app[web.1]:     28:             Duration: <%= diet.duration %> days.
2016-08-05T19:35:24.513302+00:00 app[web.1]:     29:             <br>
2016-08-05T19:35:24.513302+00:00 app[web.1]:     30:             Trainer: <%= diet.user.name %>
2016-08-05T19:35:24.513303+00:00 app[web.1]:     31:             <br>
2016-08-05T19:35:24.513303+00:00 app[web.1]:     32:             Cost: <%= diet.cost %>$
2016-08-05T19:35:24.513304+00:00 app[web.1]:     33:             <br>
2016-08-05T19:35:24.513304+00:00 app[web.1]:   app/views/home/show_plans.html.erb:30:in `block in _app_views_home_show_plans_html_erb___2816138431848340693_69990420277100'
2016-08-05T19:35:29.391085+00:00 heroku[router]: at=info method=HEAD path="/" host=www.myfitstat.com request_id=4c0c4184-eea2-42a8-b6a0-500e85ccb9ec fwd="69.162.124.237" dyno=web.1 connect=1ms service=58ms status=200 bytes=778
2016-08-05T19:35:29.331354+00:00 app[web.1]: Started HEAD "/" for 69.162.124.237 at 2016-08-05 20:35:29 +0100
2016-08-05T19:35:31.244915+00:00 app[web.1]: Started HEAD "/users/sign_in" for 69.162.124.237 at 2016-08-05 20:35:31 +0100
2016-08-05T19:35:31.248854+00:00 app[web.1]: Processing by Devise::SessionsController#new as HTML
2016-08-05T19:35:31.595348+00:00 app[web.1]:   Rendered devise/shared/_links.html.erb (1.5ms)
2016-08-05T19:35:31.595414+00:00 app[web.1]:   Rendered devise/sessions/new.html.erb within layouts/application (342.3ms)
2016-08-05T19:35:31.609028+00:00 heroku[router]: at=info method=HEAD path="/users/sign_in" host=www.myfitstat.com request_id=dc1f95c4-50bd-422b-8070-8e196d612281 fwd="69.162.124.237" dyno=web.1 connect=1ms service=357ms status=200 bytes=778

【问题讨论】:

  • 关心发布错误或异常?可能在你的heroku logs
  • 可能不同的是: - 编译的资产(运行 rake assets:clean assets:precompile 然后提交新文件并重新部署) - 环境变量(确保 heroku config 对于两个应用程序相同) -迁移并重新启动(有时 postgres 缓存在迁移后已过时,因此在两个应用程序上运行 heroku restart
  • 感谢您的回复,非常感谢。清理和预编译的资产然后再次推送和提升。分期工程精细生产仍然破碎。在原始帖子中添加了日志。
  • 请发布更多日志,我看不到它引发的错误或其余的回溯。
  • 好像是数据问题ActionView::Template::Error (undefined method name for nil:NilClass) ?无论您调用什么 .name 似乎都不存在。您的数据库在两种环境中是否相同?如果此应用未投入生产,请尝试将您的生产环境指向您的暂存数据库,看看它是否适用于暂存数据,或者只是确保实际调用的名称存在。

标签: ruby-on-rails ruby heroku


【解决方案1】:

您的数据在暂存中与在生产中不同,这似乎是一个问题。 Diet.user 在您的生产环境中为零,从错误消息中可以看出:

ActionView::Template::Error (undefined method `name' for nil:NilClass):
2016-08-05T19:35:24.513301+00:00 app[web.1]:     27:             <br>
2016-08-05T19:35:24.513301+00:00 app[web.1]:     28:             Duration: <%= diet.duration %> days.
2016-08-05T19:35:24.513302+00:00 app[web.1]:     29:             <br>
2016-08-05T19:35:24.513302+00:00 app[web.1]:     30:             Trainer: <%= diet.user.name %>
2016-08-05T19:35:24.513303+00:00 app[web.1]:     31:             <br>
2016-08-05T19:35:24.513303+00:00 app[web.1]:     32:             Cost: <%= diet.cost %>$
2016-08-05T19:35:24.513304+00:00 app[web.1]:     33:             <br>

我会进入数据库并验证是否有 Diet.user 的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-22
    • 2017-12-17
    • 2020-11-13
    • 2015-08-03
    • 2016-09-14
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多