代码之家  ›  专栏  ›  技术社区  ›  Jeremy Thomas

2个heroku应用程序共享数据库且未同步

  •  -1
  • Jeremy Thomas  · 技术社区  · 7 年前

    我有两个应用程序通过 heroku database sharing tool . 我注意到一个客户被提供的数据,不知何故只存在于2个数据库中的1个。当我说2个数据库时,我指的是可以通过运行 heroku run rails c 分别来自每个应用程序。

    > pp c.weigh_ins.pluck(:id, :date, :current_weight)
    D, [2018-10-16T14:47:43.016457 #4] DEBUG -- :    (30.4ms)  SELECT "weigh_ins"."id", "weigh_ins"."date", "weigh_ins"."current_weight" FROM "weigh_ins" WHERE "weigh_ins"."client_id" = $1  [["client_id", 19305]]
    [[139358, Tue, 09 Oct 2018 00:00:00 EDT -04:00, 170.0],
     [138723, Tue, 02 Oct 2018 00:00:00 EDT -04:00, 217.2], # where does this come from?
     [138708, Tue, 02 Oct 2018 00:00:00 EDT -04:00, 174.6],
     [137962, Tue, 25 Sep 2018 00:00:00 EDT -04:00, 176.6],
     [137243, Tue, 18 Sep 2018 00:00:00 EDT -04:00, 175.8],
     [136489, Tue, 11 Sep 2018 00:00:00 EDT -04:00, 177.0],
     [135792, Tue, 04 Sep 2018 00:00:00 EDT -04:00, 178.8],
     [135217, Tue, 28 Aug 2018 00:00:00 EDT -04:00, 182.4],
     [134593, Tue, 21 Aug 2018 00:00:00 EDT -04:00, 184.2],
     [133950, Tue, 14 Aug 2018 00:00:00 EDT -04:00, 186.4],
     [133320, Tue, 07 Aug 2018 00:00:00 EDT -04:00, 188.8],
     [132630, Tue, 31 Jul 2018 00:00:00 EDT -04:00, 190.6],
     [132053, Fri, 20 Jul 2018 00:00:00 EDT -04:00, 194.4]]
    

    附录2:

    > pp c.weigh_ins.pluck(:id, :date, :current_weight)
       (15.8ms)  SELECT "weigh_ins"."id", "weigh_ins"."date", "weigh_ins"."current_weight" FROM "weigh_ins" INNER JOIN "check_ins" ON "weigh_ins"."check_in_id" = "check_ins"."id" WHERE "weigh_ins"."deleted_at" IS NULL AND "check_ins"."deleted_at" IS NULL AND "check_ins"."client_id" = $1  ORDER BY "check_ins"."week" DESC, "check_ins"."week" ASC  [["client_id", 19305]]
       (15.8ms)  SELECT "weigh_ins"."id", "weigh_ins"."date", "weigh_ins"."current_weight" FROM "weigh_ins" INNER JOIN "check_ins" ON "weigh_ins"."check_in_id" = "check_ins"."id" WHERE "weigh_ins"."deleted_at" IS NULL AND "check_ins"."deleted_at" IS NULL AND "check_ins"."client_id" = $1  ORDER BY "check_ins"."week" DESC, "check_ins"."week" ASC  [["client_id", 19305]]
    [[139358, Tue, 09 Oct 2018 00:00:00 EDT -04:00, 170.0],
     [138708, Tue, 02 Oct 2018 00:00:00 EDT -04:00, 174.6],
     [137962, Tue, 25 Sep 2018 00:00:00 EDT -04:00, 176.6],
     [137243, Tue, 18 Sep 2018 00:00:00 EDT -04:00, 175.8],
     [136489, Tue, 11 Sep 2018 00:00:00 EDT -04:00, 177.0],
     [135792, Tue, 04 Sep 2018 00:00:00 EDT -04:00, 178.8],
     [135217, Tue, 28 Aug 2018 00:00:00 EDT -04:00, 182.4],
     [134593, Tue, 21 Aug 2018 00:00:00 EDT -04:00, 184.2],
     [133950, Tue, 14 Aug 2018 00:00:00 EDT -04:00, 186.4],
     [133320, Tue, 07 Aug 2018 00:00:00 EDT -04:00, 188.8],
     [132630, Tue, 31 Jul 2018 00:00:00 EDT -04:00, 190.6],
     [132053, Fri, 20 Jul 2018 00:00:00 EDT -04:00, 194.4]]
    

    因为两个应用程序都有相同的 DATABASE_URL 他们不应该访问同一个数据库吗?有没有办法让它们不同步?我知道他们有不同的查询,但他们应该返回相同的数据。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Marcin Kołodziej    7 年前

    应用程序中的查询不同。主要是,你的第一个应用程序会返回已删除的记录,因为没有条件返回 deleted_at IS NULL (第二个也做了一个附加的 INNER JOIN 可以过滤出更多的结果)。如果您使用的是ActiveRecord模型,您可能忘记了第一个应用程序中的默认作用域。