Рубин на рельсах. Почему schema.rb построен на существующих данных через db: schema: dump почти пуст? - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь найти правильный (любой) метод для создания приложения в Ruby on Rails с существующей базой данных ( PostgreSQL ) с данными и свежим приложением, созданным с помощью:

rails new --database=postgresql -J --skip-coffee .

Я нашел https://github.com/frenesim/schema_to_scaffold, но сначала мне нужен файл со структурой базы данных: schema.rb. Я ищу способ сделать это автоматически.

В результате rake db:schema:dump создается файл schema.rb, но только с таким содержимым:

ActiveRecord::Schema.define(version: 0) do
  enable_extension "plpgsql"
end

И я застрял здесь. Почему этот файл пуст? Почему здесь нет таблиц?

У меня есть соединение с БД и ошибок нет. Я сделал rake db:create, прежде чем тестировать. Создание баз, описанных в database.yml, прошло успешно.

Сначала я использовал контейнеры Docker, и это моя цель. Но чтобы исключить вероятность ошибки, я установил среду в системе (macOS Mojave) на основе сокета . И у меня такой же эффект.

Как сгенерировать schema.rb со структурой существующей базы данных? Или существует другой способ создания приложения RoR на основе существующей структуры данных?


Обновление : Соединение с новой базой данных, которое я сделал только для целей тестирования. Для проверки конфигурации.

Вот что еще я сделал:

  1. Дамп существующей структуры с
    pg_dump --schema-only app_development > db/structure.sql
  2. Я изменил имя в database.yml, чтобы иметь новое место для импорта.
  3. rake db:setup создана новая БД
  4. rake db:structure:load правильно создавать таблицы из файла db/structure.sql в БД.

Но rake db:schema:dump по-прежнему генерирует пустой файл, как и раньше.

Ответы [ 3 ]

1 голос
/ 22 марта 2019

Я понял!Два дня моей жизни.Файл, используемый для импорта базы данных PostgreSQL, имеет в начале:

CREATE SCHEMA employees;
-- and later
CREATE TABLE employees.department;

Я думал, что поскольку Rails генерирует базу данных с помощью rake db:structure:load, синтаксис файла правильный.

Но когда я создаю таблицу вручнуюusers в новой пустой базе данных, а затем pg_dump этой новой базы. У меня нет запроса CREATE SCHEMA.

И наконец rake db:schema:dump заполняет schema.rb таблицами так, как я хочу:

create_table "users", id: :serial, force: :cascade do |t|
  t.text "name"
end

Поскольку этот свежий pg_dump ed-файл имеет запрос CREATE TABLE public.users. public .

Я думаю, что ключ находится в комментариях в database.yml файле:

# Schema search path. The server defaults to $user,public
#schema_search_path: myapp,sharedapp,public

Одна картинка более ценна, чем тысяча слов: эторазличия Таблица users справа переходит к schema.rb после rake db:schema:dump

Спасибо, ребята, за комментарии.Это убедило меня, что я не совершаю ужасную ошибку.

0 голосов
/ 22 марта 2019

Похоже, вы сделали rake db:create, который создал для вас новую базу данных, а затем rake db:schema:dump, который сгенерировал для вас файл schema.rb из вновь созданной (пустой) базы данных.

Если у вас есть существующая база данных, которую вы хотите использовать, вам потребуется изменить файл database.yml, чтобы подключиться к нему.

Если вы хотите создать новую базу данных, вам нужно сгенерировать Миграции базы данных Active Record например) rails generate migration CreateProducts name:string part_number:string и затем запустить их rake db:migrate, чтобы обновить базу данных и сгенерировать schema.rb.

0 голосов
/ 21 марта 2019

Если вы установили правильную конфигурацию базы данных, вы можете использовать rake db:migrate для регенерации файла схемы.

edit:

Хорошо, так что давайте проверим, правильно ли я понял:

  • у вас есть существующая база данных с таблицами и данными в ней
  • у вас есть совершенно новое приложение rails
  • вы хотите отразить в вас структуру базы данных schema.rbфайл

Это правильно?Если да, то, как я писал ранее - без добавления каких-либо новых миграций в вашу кодовую базу, запустите rake db:migrate.Эта задача не только применяет изменения из файла миграции, но также updates ваш файл схемы для синхронизации с фактической базой данных.

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