2017-02-01 2 views
0

Я изучаю Эликсир и нуждаюсь в некоторой помощи. У меня есть простое приложение, которое использует mnesia (а не Amnesia). Когда я начинаю mnesia я:Обработка тестов и баз данных Dev Mnesia в Elixir

:mnesia.create_schema([node()]) 
:mnesia.create_table(Table, [attributes: [:id, :name]]) 
:mnesia.start 

Это создает каталог [email protected]. Я хочу иметь как минимум две разные базы данных, одну для тестов и одну для разработки. Я сейчас проверяю это, используя Mix.env. Я планирую стирать тестовую базу данных каждый раз, когда мое приложение останавливается и создает его каждый раз, когда он запускается (используя методы start и stop).

каталог данных, созданный mnesia принимает имя Erlang VM, поэтому я думаю, мне нужно назвать свои виртуальные машины в соответствии с окружающей средой (:dev, :test или :prod).

Возможно ли это? Правильно ли это?


Update

Я знаю, что я могу выбрать, где данные мою базу данных Mnesia хранится (спасибо Марины). Но когда я указать «обычай» каталог, у меня есть это странное поведение:

iex(1)> :mnesia.system_info() 
===> System info in version {mnesia_not_loaded,[email protected], 
           {1486,66262,472243}}, debug level = trace <=== 
opt_disc. Directory  <<"/my/custom/dir">> is NOT used. 
use fallback at restart = false 
running db nodes = [] 
stopped db nodes = [[email protected]] 
:no 

Так что я могу видеть, что он знает, где я хочу, чтобы хранить свои данные, однако это говорит мне «не используется». Я не знаю, почему ... Тогда

iex(2)> :mnesia.create_schema([node()]) 
{:error, {:EXIT, :function_clause}} 

Это не помогает создавать схемы (отлично работает, когда я не указать «пользовательский» каталог). Есть идеи?


Update 2

ДОЛЖНЫ использовать одинарные кавычки путь к каталогу (не знаю почему)

+0

вы можете получить доступ к databa путем определения реж http://stackoverflow.com/questions/21150613/в-есть-а-встроенный-механизм-для-нас к пуску-Mnesia-в-эликсира. line iex (2)>: приложение.set_env (: mnesia,: dir, 'sample') –

+0

Спасибо, Maryna за ваш вклад, он помог, но все еще сталкивается с проблемами ... – rmonjo

+0

Я вижу обновление, возможно, он ждет атома –

ответ

1

Самый простой способ иметь отдельные mnesia баз данных для различных сред для определения Mix.env в вашем конфигурации приложения. Вы можете поместить что-то подобное в вашем config.exs:

config :mnesia, dir: 'mnesia/#{Mix.env}/#{node()}' 

Но есть несколько важных вещей, которые вы должны заботиться о:

  • Использование должны использовать одинарные кавычки вместо двойные кавычки
  • Родительский каталог для базы данных должен существовать, иначе он не удастся. (Причина, по которой не терпит неудачу, если вы не указать пользовательский путь, потому что ваш каталог приложение уже существует)