【发布时间】: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