Elixir/Phoenix で yak shaving

yak shaving とは

1つの問題を解決しようとしたら、次から次へと問題が発生していくさま。

Ectoでモデルづくり

テーブル設計も終わったし、Ectoとかいうのでモデル作っていくぞー(´ω`)ノ

mix phoenix.gen.model で自動生成されるidはbigint、
でも、モデル作成時にbigintを渡すことが出来ないらしい。

mix phoenix.gen.model User users test:bigint 
** (Mix) Unknown type `bigint` given to generator

なので、外部キーは使いたくないが使わざるえないみたい。
mix phoenix.gen.model Friend friends user_id:references:users ...
こんな感じ。

個人的に外部キーを使うとハマることが多いから、使いたくないんだけども。。。
まあ運用するのは私じゃないから、もう知らない(´ω`)b

mix ecto.migarate で生成されるやつなんかすごい・・・(´ω`;)

ん?よく考えたら、とあるテーブルだけパーテーション切るんだった。
あれ?外部キーがあるテーブルってパーテーション切れないね。
パーテーション切るテーブルだけ外部キーをやめる?
気持ち悪いけどそれでもいいかなぁ・・・。
あっいや、でもbigintが指定出来ないからダメだ。

モデルは置いといて、スキーマはこれではいかんね

DDLを用意してスキーマを作ることにしよう。
それっぽいコマンドがあった。

mix ecto.load

https://hexdocs.pm/ecto/Mix.Tasks.Ecto.Load.html

おや、自分の環境にこのタスクがない?
どうやらphoenix_ectoのバージョンが古いみたい。

ということでアップグレードしてみよう。
phoenixのバージョン上げるのは怖いから、
phoenix_ectoだけあげようと思ったらなんだかダメみたい。

/code # mix deps.get
 Running dependency resolution

Failed to use "ecto" (versions 2.0.0-beta.0 to 2.0.3) because
  ja_serializer (version 0.8.1) requires ~> 1.0
  phoenix_ecto (version 3.0.0) requires ~> 2.0.0-rc

Failed to use "poison" (versions 2.0.0 to 2.2.0) because
  ecto (version 2.0.3) requires ~> 1.5 or ~> 2.0
  phoenix (version 1.1.6) requires ~> 1.5 or ~> 2.0
  You specified ~> 1.3 in your mix.exs

あぁ ja_serializer のバージョン上げなきゃいけないのか。。。(´ω`;)

mix deps.get
Running dependency resolution
Dependency resolution completed
.
.
.

phoenix_ecto: 3.0.0
.
.
.

今度は成功(´ω`)b

しかし今度は mix test でエラーが起こるようになる。
アップグレードガイドを見てみる(´ω`)

https://gist.github.com/chrismccord/29100e16d3990469c47f851e3142f766#ecto-20

あぁ・・・Ecto2.0を使うために様々なところの変更を入れなきゃいけないのね・・・orz

私は mix ecto.load が使いたいだけなんだけども・・・
というかダンプを流したいだけなんだけど・・・

やはりmysql-clientで接続してDDL流すのが妥当な気がしてきた

↑いまここ( ´ω`)≡3