2016-04-20 10 views
-1

Ich habe ein Problem mit der Verbindung zwischen MySQL und Ruby auf Schienen.Wie stellt man eine Verbindung von MySQL zu Ruby on Rails her, indem man die Datei database.yml richtig verwendet?

Ich habe eine Datenbank in MySQL, und ich muss es in Ruby auf Schienen zu ActiveRecord migrieren. Um das zu tun, muss ich in meinem Ruby on Rails-Projekt die database.yml Datei ändern, wie folgt aus:

# SQLite version 3.x 
# gem install sqlite3 
# 
# Ensure the SQLite 3 gem is defined in your Gemfile 
# gem 'sqlite3' 
# 
default: &default 
    adapter: sqlite3 
    pool: 5 
    timeout: 5000 

development: 
    adapter: mysql2 
    database: ******** 
    username: ****** 
    password: ****** 
    host: ******* 

# Warning: The database defined as "test" will be erased and 
# re-generated from your development database when you run "rake". 
# Do not set this db to the same as development or production. 
test: 
    <<: *default 
    database: db/test.sqlite3 

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

Offensichtlich sind die * Zeichen sind Informationen ich nicht zeigen müssen, aber es ist richtig konstruiert, und die Verbindung wird wie üblich hergestellt.

Das Problem kommt in Ruby on Rails Konsole. Die Migration wird nicht ordnungsgemäß ausgeführt und alle IDs sind null, unabhängig von der zu migrierenden Tabelle. Zum Beispiel nehme ich dies aus einer Tabelle:

ID_NILL

Alle ID sind null, in einer Tabelle, so kann ich nicht, zum Beispiel, eine Liste des letzten Benutzers ich in der Datenbank eingeführt, weil ich würde eine Bestellung mit der ID machen müssen. Im Gemfile habe ich den Edelstein mysql2.

Was mache ich falsch?

+0

Ist dies eine zuvor vorhandene Datenbank? – Matt

+0

Ich glaube nicht, dass Ihre Verbindungskonfiguration etwas mit dem 'nil' ID-Problem zu tun hat. Wie sieht dein Modell aus? Was ist mit dem Schema? Sie sollten auch die Standardeinstellungen entfernen, wenn Sie sie nicht verwenden. – tadman

+0

war meine Information hilfreich? –

Antwort

1

Zuerst müssen Sie den Edelstein installieren. Installieren Sie das neueste Juwel in meinem Fall habe ich die neueste Version gegeben

gem 'mysql2','~> 0.3.20' 


Dann müssen Sie Ihre database.yml Datei wie diese

# SQLite version 3.x 
# gem install sqlite3 
# 
# Ensure the SQLite 3 gem is defined in your Gemfile 
# gem 'sqlite3' 
# 
default: &default 
    adapter: mysql2 
    pool: 5 
    timeout: 5000 
    username: username 
    password: password 

development: 
    <<: *default 
    database: database/development 

# Warning: The database defined as "test" will be erased and 
# re-generated from your development database when you run "rake". 
# Do not set this db to the same as development or production. 
test: 
    <<: *default 
    database: test/development 

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


konfigurieren Sie dann die Datenbank erstellen mit rake db: create oder rails db: create und dann können Sie Datenbank sowohl Entwicklung und Test verwenden.

0

Endlich kann ich ordnungsgemäß von mysql zu ActiveRecords migrieren, danke euch allen. Die Verbindung zwischen beiden mit der Datenbank.yml wurde korrekt erstellt, das Problem kam von der Datenbank in MySQL.

In Mysql habe ich eine komplette Datenbank, aber ich muss nur Tabellen mit Unterabfrage migrieren, das Problem ist, dass die neuen Tabellen nicht richtig den Primärschlüssel oder den Fremdschlüssel erben, weil die Tabellen daraus erstellt werden direkt subquerys, zeige ich Ihnen, wie:

Dies ist ein Bild ist, mit einer Abfrage Whit colums aus der Tabelle Benutzer: anzeigen Spalten von den Benutzern, aus der ersten Datenbank:

Correct Table from Users

An diesem ist ein Bild aus den neuen Benutzertabellen, die direkt aus einer Unterabfrage gegen den ersten Benutzer ta generiert wurden ble:

Incorrect Table from Users

Wie Sie durch die atributes sehen können, erben nur die Arten und Grenzen von allen, aber dont nichts mehr

Für resolve es, statt Verwendung einer Unterabfrage erben, i erstellen eine neue Tabelle, die den Fremdschlüssel berücksichtigt und zusammenbaut, und dann die neuen Zeilen mit einer INSERT INTO-Klausel hinzufügen.

Danke Ihnen allen.

+0

Wenn Ihr Problem gelöst ist, korrigieren Sie meine Antwort, indem Sie mir Punkte geben –