Чтение HTML-файла в экто-миграции - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь прочитать html-файл из моего priv/repo/templates и вставить его в виде строкового значения в таблицу:

def change do
  consultant_engagement_html = File.read!(Application.app_dir(:enterprise, "priv/repo/templates") <> "/consultant_engagement.html")
  execute "INSERT INTO rapid_contract_templates(name, html, type, inserted_at, updated_at) VALUES('Consultant Engagement', 'consultant_engagement', '#{consultant_engagement_html}', '#{DateTime.utc_now}', '#{DateTime.utc_now}')"
end

Однако я получаю эту ошибку при запуске миграции:

(Postgrex.Error) ERROR 42601 (syntax_error): syntax error at or near "written"

«записано» - слово, найденное в html-файле.

1 Ответ

1 голос
/ 04 июня 2019

Если в HTML есть одна одинарная кавычка, он испортит экранирование в запросе, что приведет к неверному синтаксису. Правильнее всего было бы использовать соответствующий API Repo для этого:

MyApp.Repo.query! "INSERT INTO rapid_contract_templates(name, html, type, inserted_at, updated_at) VALUES('Consultant Engagement', 'consultant_engagement', $1, $2, $3)",
                  [consultant_engagement_html, DateTime.utc_now, DateTime.utc_now]

Но, как правило, не рекомендуется выполнять загрузку данных внутри миграций, поскольку это отдельная задача. Возможно, лучше использовать исходный файл (если вы используете Phoenix, он входит в комплект)?

...