Rails ActiveRecord查询在本地工作,但在Heroku上的结果不同



我的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在视图中显示有关这些作业的一些信息。

这是来自我的本地env:的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[路由器]的步骤介于两者之间,或者这是否与此有关。

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

有人知道为什么会发生这种事吗?它把我逼疯了。

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

最新更新