Rails - PG :: UndefinedTable: ОШИБКА: отношение "клиенты" не существует - PullRequest
0 голосов
/ 11 октября 2019

Rails 5.0.4, Ruby 2.5.1, Postgres, Ubuntu 18.04

Я прочитал несколько сообщений здесь в stackoverflow, похожих на мою проблему, но ничего, что помогло мне или не схоже с моим.

История вопроса

Я разработал персональное приложение на своем ноутбуке. Я подтолкнул к github и heroku и все работает просто отлично. Я хотел иметь возможность работать с этим приложением на моем настольном компьютере. Он имеет те же настройки, что и мой ноутбук: оба работают под управлением Ubuntu 18.04, оба имеют одинаковые версии ruby ​​и rails, оба имеют postgres.

Я клонировал приложение из github на рабочий стол. Проблема: любая команда rails или rake, которую я запускаю, генерирует эту ошибку.

/home/jdc44/.rvm/gems/ruby-2.5.1/gems/activerecord-5.0.4/lib/active_record/connection_adapters/postgresql/database_statements.rb:88:in `async_exec': PG::UndefinedTable: ERROR:  relation "customers" does not exist
LINE 8:                WHERE a.attrelid = '"customers"'::regclass
                                          ^
:               SELECT a.attname, format_type(a.atttypid, a.atttypmod),
                     pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod,
             (SELECT c.collname FROM pg_collation c, pg_type t
               WHERE c.oid = a.attcollation AND t.oid = a.atttypid AND a.attcollation <> t.typcollation),
                     col_description(a.attrelid, a.attnum) AS comment
                FROM pg_attribute a LEFT JOIN pg_attrdef d
                  ON a.attrelid = d.adrelid AND a.attnum = d.adnum
               WHERE a.attrelid = '"customers"'::regclass
                 AND a.attnum > 0 AND NOT a.attisdropped
               ORDER BY a.attnum
 (ActiveRecord::StatementInvalid)

Так как в ней указано PG::UndefinedTable: ERROR..., я "предположил", что это проблема установки базы данных.

На моем рабочем столев postgres я создал те же базы данных, пользователей и пароли, что и на моем ноутбуке.

postgres=# \l
                                           List of databases
          Name          |   Owner    | Encoding |   Collate   |    Ctype    |     Access privileges     
------------------------+------------+----------+-------------+-------------+---------------------------
 myapp                  | myapp      | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 myapp_development      | cowan      | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/cowan                +
                        |            |          |             |             | cowan=CTc/cowan          +
                        |            |          |             |             | myapp=CTc/cowan
 myapp_test             | myapp      | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/myapp                +
                        |            |          |             |             | myapp=CTc/myapp
 postgres               | postgres   | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 

За исключением того, что отображается в столбце Access privileges, строки с myapp ... идентичен выводу моего ноутбука.

database.yml

default: &default
  adapter: postgresql
  encoding: unicode
  # For details on connection pooling, see rails configuration guide
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  host: localhost
  username: myapp
  password: *****

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

production:
  <<: *default
  database: myapp_production
  username: myapp
  password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>

Опять же, любая команда rake или rails выводит меня из этой ошибки. т.е.: rake db:migrate или rails console.

Любые предложения будут с благодарностью.

JC

Ответы [ 2 ]

0 голосов
/ 13 октября 2019

Я наконец понял это. Я снова прочитал вывод ошибки и нашел следующую строку:

/home/jdc44/Websites/myapp/spec/factories/job.rb:2:in блок в '`.

job.rb
FactoryGirl.define do
  factory :job, :class => Job do
    customer_id FactoryGirl.create(:customer).id 
    ...

Поскольку ошибка была в таблице customers, я решил, что оначтобы иметь какое-то отношение к спецификации jobs, так как вакансии и клиенты имеют отношения: customer has many jobs Спецификация вакансий имеет следующее:

before do
    @job = FactoryGirl.build(:job)
  end

По какой-то причине изменив build на create заставил все работать. Не знаю почему, но это работает.

0 голосов
/ 11 октября 2019

Я думаю, что вы забыли запустить миграцию:

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