【问题标题】:Rails ActiveRecord query working locally, but different result on HerokuRails ActiveRecord 查询在本地工作,但在 Heroku 上的结果不同
【发布时间】:2017-01-31 15:12:17
【问题描述】:

我的 Rails 5 应用程序在我的本地环境中使用 SQLite3 完全按预期工作,但是当我将它部署到 Heroku 时,它可以正常工作,但有些东西的显示方式不同。我想我已经在我的作业控制器中追踪到以下 ActiveRecord 查询:

@jobs_later = current_user.jobs.joins(:stage).where("stage_id != ? AND next_step_date > ?", 5, Date.today).order(:next_step_date, stage_id: :desc)

查询获取属于当前用户的作业列表,并使用实例变量@jobs_later 在视图中显示有关它们的一些信息。

这是我本地环境中的 SQL:

User Load (0.4ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ?  [["id", 1], ["LIMIT", 1]]

Job Exists (2.3ms)  SELECT  1 AS one FROM "jobs" WHERE "jobs"."user_id" = ? LIMIT ?  [["user_id", 1], ["LIMIT", 1]]
(2.5ms)  SELECT COUNT(*) FROM "jobs" INNER JOIN "stages" ON "stages"."id" = "jobs"."stage_id" WHERE "jobs"."user_id" = ? AND (stage_id != 5 AND next_step_date > '2017-01-31')  [["user_id", 1]]

Job Load (0.3ms)  SELECT "jobs".* FROM "jobs" INNER JOIN "stages" ON "stages"."id" = "jobs"."stage_id" WHERE "jobs"."user_id" = ? AND (stage_id != 5 AND next_step_date > '2017-01-31') ORDER BY "jobs"."next_step_date" ASC, "jobs"."stage_id" DESC  [["user_id", 1]]

Step Load (2.2ms)  SELECT  "steps".* FROM "steps" WHERE "steps"."job_id" = ? ORDER BY "steps"."id" DESC LIMIT ?  [["job_id", 11], ["LIMIT", 1]]

CACHE (0.0ms)  SELECT  "steps".* FROM "steps" WHERE "steps"."job_id" = ? ORDER BY "steps"."id" DESC LIMIT ?  [["job_id", 11], ["LIMIT", 1]]

Stage Load (0.3ms)  SELECT  "stages".* FROM "stages" WHERE "stages"."id" = ? LIMIT ?  [["id", 2], ["LIMIT", 1]]

这是 Postgres 在 Heroku 上的 SQL:

2017-01-31T14:24:54.842062+00:00 app[web.1]: D, [2017-01-31T14:24:54.841973 #4] DEBUG -- : [19703b11-bfbb-4c6f-99b6-b617853ee65a]   User Load (1.6ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2  [["id", 1], ["LIMIT", 1]]

2017-01-31T14:24:54.858947+00:00 app[web.1]: I, [2017-01-31T14:24:54.858813 #4]  INFO -- : [19703b11-bfbb-4c6f-99b6-b617853ee65a]   Rendering jobs/index.html.erb within layouts/application

2017-01-31T14:24:54.867244+00:00 app[web.1]: D, [2017-01-31T14:24:54.867099 #4] DEBUG -- : [19703b11-bfbb-4c6f-99b6-b617853ee65a]   Job Exists (6.6ms)  SELECT  1 AS one FROM "jobs" WHERE "jobs"."user_id" = $1 LIMIT $2  [["user_id", 1], ["LIMIT", 1]]

2017-01-31T14:24:54.786697+00:00 heroku[router]: at=info method=POST path="/jobs/1" host=agile-lowlands-76952.herokuapp.com request_id=5d33ac27-2f26-495e-8261-0d0050723aa6 fwd="173.48.208.24" dyno=web.1 connect=0ms service=159ms status=302 bytes=1073

2017-01-31T14:24:54.904549+00:00 heroku[router]: at=info method=GET path="/jobs" host=agile-lowlands-76952.herokuapp.com request_id=19703b11-bfbb-4c6f-99b6-b617853ee65a fwd="173.48.208.24" dyno=web.1 connect=0ms service=77ms status=200 bytes=3454

2017-01-31T14:24:54.883387+00:00 app[web.1]: D, [2017-01-31T14:24:54.883287 #4] DEBUG -- : [19703b11-bfbb-4c6f-99b6-b617853ee65a]    (3.0ms)  SELECT COUNT(*) FROM "jobs" INNER JOIN "stages" ON "stages"."id" = "jobs"."stage_id" WHERE "jobs"."user_id" = $1 AND (stage_id != 5 AND next_step_date > '2017-01-31')  [["user_id", 1]]

您会注意到它在本地经历了作业用户加载、作业存在、作业加载、步骤加载和阶段加载步骤。

但在生产中,它会经历用户加载、作业退出,然后停止。不确定 heroku[router] 步骤之间是什么,或者是否与它有关。

我还检查了postgres db,数据输入正确,所以它不是空的。

有谁知道为什么会发生这种情况?快把我逼疯了。

【问题讨论】:

    标签: postgresql heroku activerecord ruby-on-rails-5


    【解决方案1】:

    毫不奇怪,这有一个明显的答案。当我部署到 Heroku 时,我没有运行 heroku run rails db:seed,所以当我的控制器中的 SQL 运行时,它试图引用其中没有数据的表。当我之前检查我的表时,我没想过要检查我正在播种的那些。

    【讨论】:

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