Rails 5.2.3 / Heroku - Почему невозможно запустить postgres в производственном режиме с squlite3 в режиме разработки? - PullRequest
0 голосов
/ 31 мая 2019

Я использую Rails 5.2.3 и получаю сообщение об ошибке приложения, когда пытаюсь просмотреть мое производственное приложение на конвейере Heroku, и следующие ошибки, когда:

  • Я бегу heroku logs Я получаю: heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/"

  • Я бегу heroku run rails console Я получаю: Error loading the 'sqlite3' Active Record adapter. Missing a gem it depends on? sqlite3 is not part of the bundle. Add it to your Gemfile. (LoadError)

  • Я бегу heroku run rails db:migrate Я получаю: LoadError: Error loading the 'sqlite3' Active Record adapter. Missing a gem it depends on? sqlite3 is not part of the bundle. Add it to your Gemfile.

Я хочу использовать sqlite3 для разработки и postgres для производства, так почему мне нужно, чтобы gem-файл sqlite3 был доступен в производственном режиме?

Вот мой гемфайл:

group :development do
  gem 'sqlite3'
end

group :production do
  gem 'pg'
end

Вот мой database.yml:

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

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

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

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

Ответы [ 5 ]

3 голосов
/ 31 мая 2019

Ваша проблема в этой части:

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

В настоящее время ваше производство все еще пытается использовать sqlite, поскольку это расширяется до

production: 
  adapter: sqlite3
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000
  database: db/production.sqlite3

И, очевидно, db/production.sqlite3 также предлагает sqlite база данных

Вместо этого измените этот раздел на

production: 
  adapter: postgresql
  host: [your db host] 
  database: [your database] 
  username: [your username]
  password: [your password]
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000

Все сказанное PostgreSQL бесплатное, и вам действительно не следует разрабатывать sqlite снова, если вы будете развертывать вPostgreSQL.

SQLite отлично подходит для подтверждения концепции, поскольку его легко масштабировать и легко разрушить без реальных внешних зависимостей, но если вы действительно хотите создать приложение и развернуть его где-то, вы должны использоватьготовая производственная база данных.

Конфигурация Heroku DB

Heroku Начало работы Rails 5

0 голосов
/ 07 июня 2019

Я исправил это, изменив мой config / database.yml на:

production:
  adapter: postgresql
  encoding: unicode
  database: [my_db]
  pool: 5
  username: [myapp]
  password: [password]

И работает: heroku addons:create heroku-postgresql a- app_name, потому что PostgreSQL еще не был подготовлен для моего приложения.

0 голосов
/ 01 июня 2019

Я знаю, что вы написали

Я хочу использовать sqlite3 для разработки и postgres для производства

, и я могу понять, потому что я сам там был;ощущение, что postgres кажется большим шагом для установки и «я просто хочу что-то маленькое, что работает».

Возможно, ваша причина в другом, но если это не так - установка postgres избавит вас от многих проблем.Postgres бесплатен, и параметры установки по умолчанию, вероятно, подойдут вам.

Помимо того, что вы избавляетесь от проблем с адаптерами и гемами, у вас также иногда возникают различия в доступных SQL-командах (когда вы хотитеделать что-то более продвинутое) и какие вещи имеют высокую производительность или нет.

https://www.postgresql.org/download/

Если у вас разная среда разработки и производства - вы потратите много времени на исправление вещей, которые не увеличивают ценность того, что вы создаете.

0 голосов
/ 01 июня 2019

Попробуйте ваш database.yml вот так,

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

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

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

production:
  adapter: postgresql
  pool: 5
  timeout: 5000
  database: db/production.sqlite3
0 голосов
/ 01 июня 2019

Ваша настройка production в database.yml наследует настройки development - вы хотите изменить ее на

production:
  adapter: postgresql
  url: <%= ENV['DATABASE_URL'] %>

url: <%= ENV['DATABASE_URL'] %> применимо, если вы используете Heroku.Если нет, вы можете рассмотреть формат спецификации учетных данных здесь .

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