Смена баз данных
Исходный кодПриложения Phoenix по умолчанию настроены на использование PostgreSQL, но что, если мы хотим использовать другую базу данных, например MySQL? В этом руководстве мы расскажем, как изменить настройки по умолчанию — как при создании нового приложения, так и для уже существующего приложения, настроенного для работы с PostgreSQL.
Использование phx.new
Если мы собираемся создать новое приложение, настроить его для использования MySQL несложно. Достаточно передать флаг --database mysql команде phx.new, и всё будет настроено правильно.
$ mix phx.new hello_phoenix --database mysql
Это автоматически установит все необходимые зависимости и настройки. После установки этих зависимостей с помощью mix deps.get мы будем готовы начать работу с Ecto в нашем приложении.
В существующем приложении
Если у нас уже есть приложение, достаточно сменить адаптер и внести несколько небольших изменений в настройки.
Чтобы сменить адаптер, нужно удалить зависимость Postgrex и вместо неё добавить новую — MyXQL.
Откроем файл mix.exs и сделаем это.
defmodule HelloPhoenix.MixProject do
use Mix.Project
...
# Specifies your project dependencies.
#
# Type `mix help deps` for examples and options.
defp deps do
[
{:phoenix, "~> 1.4.0"},
{:phoenix_ecto, "~> 4.4"},
{:ecto_sql, "~> 3.13"},
{:myxql, ">= 0.0.0"},
...
]
end
end
Затем настроим адаптер для использования учётных данных MySQL по умолчанию, изменив config/dev.exs:
config :hello_phoenix, HelloPhoenix.Repo, username: "root", password: "", database: "hello_phoenix_dev"
Если у нас уже есть блок настроек для HelloPhoenix.Repo, достаточно изменить значения в соответствии с новыми. Также необходимо указать правильные значения в файлах config/test.exs и config/runtime.exs.
Осталось открыть lib/hello_phoenix/repo.ex и убедиться, что для :adapter задано значение Ecto.Adapters.MyXQL.
Теперь осталось получить новую зависимость, и можно приступать к работе.
$ mix deps.get
После установки и настройки нового адаптера можно создать базу данных.
$ mix ecto.create
База данных для HelloPhoenix.Repo создана. Теперь можно запускать любые миграции и выполнять любые другие задачи с помощью Ecto.
$ mix ecto.migrate [info] == Running HelloPhoenix.Repo.Migrations.CreateUser.change/0 forward [info] create table users [info] == Migrated in 0.2s
Другие варианты
Хотя Phoenix использует проект Ecto для взаимодействия со слоем доступа к данным, существует множество других вариантов доступа к данным, некоторые из которых встроены даже в стандартную библиотеку Erlang. ETS — доступное в Ecto через etso — и DETS — это хранилища данных «ключ-значение», встроенные в Erlang/OTP. В Elixir и Erlang также есть ряд библиотек для работы с различными популярными хранилищами данных.
Мир данных открыт для вас, но в этих руководствах мы не будем рассматривать такие варианты.
© 2014 Chris McCord
Licensed under the MIT License.
https://phoenix.hexdocs.pm/swapping_databases.html