8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PhonenixでSqlite3を使う

Last updated at Posted at 2019-10-31

最近、Elixir+Phoenixを勉強し始めてサンプルWebを作りまくっていたら、デフォルトデータベースがPostgreSQLなので気がついたら大量のDBが作られまくっていたという経験をしました。
そこでSqlite3を使って各プロジェクトのローカルフォルダにデータベースを作るようにしてみます。
(Docker Composeを使う方法も試したのですがトラブルが起きた時に原因の特定が難しくなるのが難点)

環境

  • macOS Mojave 10.14
  • Elixir 1.9.2
  • Phoenix 1.4.10

手順

まず普通にPhoenixプロジェクトを作成します。

$ mix phx.new blog
Fetch and install dependencies? [Yn] y
$ cd blog

mix.exsに必要なライブラリを追加する
(ここのバージョンの依存関係で結構苦労した)

mix.exs
  defp deps do
    [
      {:phoenix, "~> 1.4.10"},
      {:phoenix_pubsub, "~> 1.1"},
      {:phoenix_ecto, "~> 3.6"}, # 4.0 → 3.6に変更
      # {:ecto_sql, "~> 3.2"}, # 不要
      # {:postgrex, ">= 0.0.0"}, # 不要
      {:ecto, "~> 2.2.9"}, # 追加
      {:sqlite_ecto2, "~> 2.4"}, # 追加
      {:phoenix_html, "~> 2.11"},
      {:phoenix_live_reload, "~> 1.2", only: :dev},
      {:gettext, "~> 0.11"},
      {:jason, "~> 1.0"},
      {:plug_cowboy, "~> 2.0"}
    ]
  end

一旦クリーンにしてから再度インストール

$ mix deps.clean --all
$ rm mix.lock
$ mix deps.get

エラーがでなければ成功。

プロジェクトの修正

config/dev.exs
# Configure your database
config :blog, Blog.Repo,
  adapter: Sqlite.Ecto2,
  database: "blog.sqlite3"
lib/blog/repo.ex
defmodule Blog.Repo do
  use Ecto.Repo,
    otp_app: :blog,
    adapter: Sqlite.Ecto2 # 変更
end

DBを作成してサーバーを立ち上げる。

$ mix ecto.create
$ mix phx.server

ブラウザで http://localhost:4000 にアクセスしてPhoenixのページが表示されれば一先ず成功です。
プロジェクトのフォルダにはblog.sqlite3というDBのファイルができていると思います。
スクリーンショット 2019-10-30 17.48.18.png

サンプルブログを作成してみる

これだけだとSqlite3が使われてるのがどうかわからないので、試しにブログっぽいWebサイトをジェネレートしてみます。

$ mix phx.gen.html Articles Article articles title body:text
$ mix ecto.migrate
lib/blog_web/router.ex
  scope "/", BlogWeb do
    pipe_through :browser

-    get "/", PageController, :index
+    get "/", ArticleController, :index #変更
+    resources "/articles", ArticleController # 追加
  end
$ mix phx.server

スクリーンショット 2019-10-30 16.55.30.png
サイトが完成。記事を書き込めることも確認できました。

コードの修正が数カ所あるので構築のスピード感が落ちるのは残念です。
それでもサンプルを作りっぱなしにしてもDBを汚さないというのは利点かもしれません。

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?