Saya telah membuat aplikasi web di Rails dan saya menggunakan sqlite3. Sekarang saya mencoba untuk menyebarkannya dengan heroku yang menggunakan pg tetapi saya mengalami kesalahan ini:

PG::UndefinedTable: ERROR:  relation "user_profiles" does not exist
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/connection_adapters/postgresql/database_statements.rb:92:in `exec'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/connection_adapters/postgresql/database_statements.rb:92:in `block (2 levels) in execute'
/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.2.2/lib/active_support/dependencies/interlock.rb:48:in `block in permit_concurrent_loads'
/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.2.2/lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.2.2/lib/active_support/dependencies/interlock.rb:47:in `permit_concurrent_loads'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/connection_adapters/postgresql/database_statements.rb:91:in `block in execute'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/connection_adapters/abstract_adapter.rb:718:in `block (2 levels) in log'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/connection_adapters/abstract_adapter.rb:717:in `block in log'
/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.2.2/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/connection_adapters/abstract_adapter.rb:708:in `log'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/connection_adapters/postgresql/database_statements.rb:90:in `execute'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/connection_adapters/postgresql/schema_statements.rb:443:in `add_index'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/migration.rb:890:in `block in method_missing'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/migration.rb:858:in `block in say_with_time'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/migration.rb:858:in `say_with_time'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/migration.rb:879:in `method_missing'
/app/db/migrate/20200327044108_create_user_profiles.rb:10:in `block in change'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/connection_adapters/abstract/schema_statements.rb:309:in `create_table'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/migration.rb:890:in `block in method_missing'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/migration.rb:858:in `block in say_with_time'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/migration.rb:858:in `say_with_time'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/migration.rb:879:in `method_missing'
/app/db/migrate/20200327044108_create_user_profiles.rb:3:in `change'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/migration.rb:828:in `exec_migration'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/migration.rb:812:in `block (2 levels) in migrate'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/migration.rb:811:in `block in migrate'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:473:in `with_connection'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/migration.rb:810:in `migrate'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/migration.rb:1001:in `migrate'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/migration.rb:1311:in `block in execute_migration_in_transaction'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/migration.rb:1362:in `block in ddl_transaction'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/connection_adapters/abstract/database_statements.rb:281:in `block in transaction'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/connection_adapters/abstract/transaction.rb:280:in `block in within_new_transaction'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/connection_adapters/abstract/transaction.rb:278:in `within_new_transaction'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/connection_adapters/abstract/database_statements.rb:281:in `transaction'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/transactions.rb:212:in `transaction'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/migration.rb:1362:in `ddl_transaction'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/migration.rb:1310:in `execute_migration_in_transaction'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/migration.rb:1282:in `block in migrate_without_lock'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/migration.rb:1281:in `each'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/migration.rb:1281:in `migrate_without_lock'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/migration.rb:1229:in `block in migrate'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/migration.rb:1382:in `with_advisory_lock'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/migration.rb:1229:in `migrate'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/migration.rb:1061:in `up'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/migration.rb:1036:in `migrate'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/tasks/database_tasks.rb:238:in `migrate'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/railties/databases.rake:86:in `block (3 levels) in <main>'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/railties/databases.rake:84:in `each'
/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/railties/databases.rake:84:in `block (2 levels) in <main>'
/app/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/exe/rake:27:in `<top (required)>'
/app/vendor/bundle/ruby/2.6.0/gems/bundler-1.17.3/lib/bundler/cli/exec.rb:74:in `load'
/app/vendor/bundle/ruby/2.6.0/gems/bundler-1.17.3/lib/bundler/cli/exec.rb:74:in `kernel_load'
/app/vendor/bundle/ruby/2.6.0/gems/bundler-1.17.3/lib/bundler/cli/exec.rb:28:in `run'
/app/vendor/bundle/ruby/2.6.0/gems/bundler-1.17.3/lib/bundler/cli.rb:463:in `exec'
/app/vendor/bundle/ruby/2.6.0/gems/bundler-1.17.3/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/app/vendor/bundle/ruby/2.6.0/gems/bundler-1.17.3/lib/bundler/vendor/thor/lib/thor/invocation.rb:126:in `invoke_command'
/app/vendor/bundle/ruby/2.6.0/gems/bundler-1.17.3/lib/bundler/vendor/thor/lib/thor.rb:387:in `dispatch'
/app/vendor/bundle/ruby/2.6.0/gems/bundler-1.17.3/lib/bundler/cli.rb:27:in `dispatch'
/app/vendor/bundle/ruby/2.6.0/gems/bundler-1.17.3/lib/bundler/vendor/thor/lib/thor/base.rb:466:in `start'
/app/vendor/bundle/ruby/2.6.0/gems/bundler-1.17.3/lib/bundler/cli.rb:18:in `start'
/app/vendor/bundle/ruby/2.6.0/gems/bundler-1.17.3/exe/bundle:30:in `block in <top (required)>'
/app/vendor/bundle/ruby/2.6.0/gems/bundler-1.17.3/lib/bundler/friendly_errors.rb:124:in `with_friendly_errors'
/app/vendor/bundle/ruby/2.6.0/gems/bundler-1.17.3/exe/bundle:22:in `<top (required)>'
/app/bin/bundle:104:in `load'
/app/bin/bundle:104:in `<main>'

Saya telah melihat sekeliling sedikit tetapi masih tidak bisa membuatnya bekerja. Saya dapat melihat bahwa itu ada hubungannya dengan user_profiles saya. Model profil pengguna saya:

class UserProfile < ApplicationRecord
    belongs_to :user, class_name: 'User', foreign_key: 'user_id'
    validates_uniqueness_of :user_id



end

Ini adalah migrasi profil pengguna saya:

class CreateUserProfiles < ActiveRecord::Migration[6.0]
  def change
    create_table :user_profiles do |t|
      t.integer :user_id
      t.string :name
      t.integer :age
      t.string :address
      t.string :ptName
      t.string :bio

      t.timestamps
    end
    add_foreign_key :user_profiles, :users, column: :user_id
    add_index :user_profiles, :user_id, unique: true
  end
end


Kesalahan terjadi seperti ketika saya pergi untuk melihat aplikasi saya melalui heroku, saya melihat ini: Kesalahan aplikasi. Jadi saya mencoba dan menjalankan: heroku run rake db:migrate dan kesalahan dalam judul terjadi. Saya pikir itu mungkin ada hubungannya dengan Pg yang lebih ketat dengan kunci asing. Ada saran?

0
Aidan Smith 27 Maret 2020, 20:15

1 menjawab

Jawaban Terbaik

Dari Rails 5 - ketika kita mereferensikan sebuah model, indeks pada foreign_key dibuat secara otomatis.

Lakukan saja seperti di bawah ini -

class CreateUserProfiles < ActiveRecord::Migration[6.0]
  def change
    create_table :user_profiles do |t|
      t.references :user, null: false, foreign_key: true
      t.string :name
      t.integer :age
      t.string :address
      t.string :ptName
      t.string :bio

      t.timestamps
    end
  end
end
0
Rafayet Monon 27 Maret 2020, 17:39