Как настроить приложение rails так, чтобы локальная разработка и производство развертывали как работающие - PullRequest
0 голосов
/ 11 июля 2020

Я кодировал свое приложение rails с помощью sqlite3, и все было в порядке.

Затем я развернулся на Heroku и мне пришлось изменить DB на Postgres. Единственный способ заставить производственное развертывание работать - это просто иметь gem pg в файле gem, а не иметь его в группе: production.

В любом случае, когда я пытаюсь настроить приложение следующим образом, приложение больше не будет работать локально. Что мне не хватает?

Gem File

group :development do
  gem 'web-console', '>= 3.3.0'
  gem 'sqlite3'
end

group :production do
 gem 'pg'
end

и вот мой файл db.yml

default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: db/development.sqlite3

test:
  <<: *default
  database: db/test.sqlite3

production:
  <<: *default
  adapter: postgresql
  database: db/production.sqlite3

Ответы [ 2 ]

2 голосов
/ 11 июля 2020

Производство, работает из-за pg gem и postgresql адаптера

database.yml

default: &default
  adapter: postgresql

production:
  <<: *default
  adapter: postgresql

gem файл

group :production do
 gem 'pg'
end

При разработке он не работает из-за gem sqlite3 и адаптера postgresql. Добавьте правую жемчужину базы данных. Если postgresql, то gem 'pg' внутри группы разработки

database.yml

default: &default
  adapter: postgresql
  

development:
  <<: *default
  database: dev-database

gem-файл

group :development do
  gem 'web-console', '>= 3.3.0'
  gem 'pg'
end

Лучше переключиться на единую базу данных.

Эта ссылка может помочь выбрать правильную БД в зависимости от ваших требований. Sqlite3 против Postgres против Mysql - Рельсы

1 голос
/ 12 июля 2020
Ответ

@ praaveen абсолютно правильный, но просто чтобы немного расширить его, поскольку его фрагмент database.yml был просто релевантным подмножеством, а не полным. В config/database.yml вы указываете конфигурацию базы данных для каждой среды (dev, test, prod). Эта конфигурация также зависит от типа базы данных, и, в частности, при переходе с Sqlite3 на Postgres вам необходимо изменить имена базы данных и добавить имя пользователя и пароль для каждой среды. Итак, database.yml должен выглядеть примерно так:

default: &default
  adapter: postgresql
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: dev-database
  username: whatever
  password: whatever

test:
... etc etc

Вот статья в блоге , в которой рассказывается, что вам нужно изменить, чтобы переключиться с sqlite на Postgres в существующем проекте в более пошаговая мода. Также обратите внимание, поскольку вы используете Heroku для производства, спецификация настроек базы данных работает немного иначе. См. this для описания того, как работает конфигурация Heroku PG.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...