
Возможно, я не первый, кто затронул эту тему, но я попытаюсь как можно яснее разбить свой процесс, определить свою настройку и, надеюсь, предоставить достаточно красивых картинок, чтобы помочь вам.
Раздел 0: (Потому что все обнуляется.) Прежде всего, поздравляю. Вы прошли долгий путь от объявления своей первой переменной. Вы когда-нибудь думали, что создадите полнофункциональное приложение, которое будет запрашивать вашу собственную базу данных? Теперь вы здесь и готовы поделиться этим с миром. Цените это.
Раздел 1. Спецификации, которые я использовал:
Мой терминал: о-мой-зш. Bash будет работать одинаково хорошо.
Серверная часть написана на Node.js, с Express в качестве маршрутизатора и ejs в качестве языка шаблонов.
База данных PostgreSQL, и я использовал pg-promise для подключения к ней. Я также использую Postico в качестве инструмента с графическим интерфейсом для Postgres, поэтому я могу одержимо обновлять его и видеть, как мои пользователи заполняют базу данных в режиме реального времени.
Управление сеансом происходило с помощью express-session и connect-pg-simple, и я хранил свои сеансы в отдельной таблице в своей базе данных.
Наконец, я использовал git и Github в качестве контроля версий, и это довольно неотъемлемая часть того, как мы собираемся развертывать на Heroku.
Если какие-либо из них отличаются для вас, вы можете следовать некоторым из них, но будет момент, когда вам придется уйти и найти документы для вашего варианта. Прости, я был там и знаю боль.
Раздел 2. Подготовка приложения к первому дню в школе…
В вашем проекте есть файл .env?
Если это так, и вы знакомы с переменными process.env, вы, вероятно, можете немного прокрутить. В противном случае это важно!
Файл .env скрывает переменные process.env в вашем проекте. Вы НЕ передаете этот файл в git, никогда. Создайте его в корне вашего проекта, а затем сразу же перейдите в свой файл .gitignore (если у вас его нет, создайте его сейчас, также в корне, и введите node_modules без кавычек в качестве первой строки) и поместите свой .env файл там.
Ты вернулся? Хорошо! npm install dotenv, а затем потребовать его в ОЧЕНЬ ВЕРХУ вашего основного файла server.js следующим образом: require('dotenv').config() Обратите внимание, что вы должны вызвать config в конце инструкции. Вам не нужно назначать это переменной, как это требуется в большинстве других случаев.
Существует по крайней мере один, который вам нужно будет создать, и он имеет стандартное имя. Он называется process.env.DATABASE_URL , и заглавные буквы там сделаны намеренно. Строка подключения, которую вы использовали для подключения к pg или pg-promise, вероятно, выглядит так: postgres://localhost:5432/yourproject
Теперь вы захотите изменить эту строку на эту:
const db = pgp(process.env.DATABASE_URL || "postgres://localhost:5432/yourproject")
И в вашем файле .env сделайте следующее:
process.env.DATABASE_URL="postgres://localhost:5432/yourproject"
Вот почему, в двух словах. На вашем локальном хосте вы говорите программе либо перейти к вашему файлу .env, чтобы найти строку подключения, либо в случае сбоя вернуться к жестко запрограммированной версии. Вы можете опустить «или» и просто направить строку подключения в файл .env, и пока все настроено, все в порядке. Проверьте его в любом случае, и он должен работать. Тогда почему это важно? Heroku устанавливает свой собственный process.env.DATABASE_URL в строку подключения, которая вам понадобится для подключения к базе данных на их серверах, и этот фрагмент кода позволяет без проблем запускать ваше приложение на локальном хосте или Heroku.
Если вы использовали экспресс-сеанс или аналогичный пакет, у вас будет секрет сеанса внутри объекта сеанса. Обычно это выглядит так:
app.use(session({
store: new pgSession({
conString: process.env.DATABASE_URL || "postgres://localhost:5432/yourproject",
}),
key: 'user_sid',
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: false,
cookie: { maxAge: 10 * 10 * 6000000 },
}));
Если new pgSession выглядит незнакомым, это простое соединение с pg, и ваша конфигурация может отличаться. В любом случае, если ваш секрет раскрывается в вашем приложении, измените его также на переменную process.env: process.env.SESSION_SECRET="macandcheese4ever"
Вау! Мы закончили с этим. Другие важные мелочи, которые могут привести к тому, что ваше приложение выйдет из строя при развертывании: 1) Если вы делаете вызов AJAX/Fetch к API, убедитесь, что вы используете https вместо http. 2) Проверьте свои абсолютные и относительные пути. 3) Я уверен, что их больше, но мы узнаем, как их обнаружить с помощью heroku logs . Спойлеры!
Далее — Часть 2, в которой мы начинаем работу с Heroku и выполняем некоторые сценарии Bash! Обещаю, это не повредит…