Frage

Ich habe eine Rails-Anwendung, bei der sich Benutzer anmelden müssen.Damit die Anwendung nutzbar ist, muss es daher einen ersten Benutzer im System geben, mit dem sich die erste Person anmelden kann (sie kann dann weitere Benutzer erstellen).Bisher habe ich eine Migration genutzt, um einen speziellen Benutzer zur Datenbank hinzuzufügen.

Nach Rückfrage diese Frage, scheint es, dass ich db:schema:load verwenden sollte, anstatt die Migrationen auszuführen, um neue Datenbanken auf neuen Entwicklungsmaschinen einzurichten.Leider scheint dies nicht die Migrationen zu umfassen, die Daten einfügen, sondern nur solche, die Tabellen, Schlüssel usw. einrichten.

Meine Frage ist, wie man mit dieser Situation am besten umgeht:

  1. Gibt es eine Möglichkeit, d:s:l dazu zu bringen, Dateneinfügungsmigrationen einzubeziehen?
  2. Sollte ich überhaupt keine Migrationen verwenden, um Daten auf diese Weise einzufügen?
  3. Sollte ich die Datenbank überhaupt nicht mit Daten vorab füllen?Sollte ich den Anwendungscode so aktualisieren, dass er den Fall, dass keine Benutzer vorhanden sind, ordnungsgemäß behandelt und die Erstellung eines ersten Benutzerkontos live aus der Anwendung ermöglicht?
  4. Irgendwelche anderen Optionen?:) :)
War es hilfreich?

Lösung 7

Ich dachte, ich einige der großen Antworten zusammenfassen würde ich auf diese Frage gehabt haben, zusammen mit meinen eigenen Gedanken jetzt habe ich sie alle lesen:)

Es gibt zwei verschiedene Themen hier:

  1. Soll ich die Datenbank mit meinen speziellen ‚admin‘ Benutzern vorab füllen? Oder sollte die Anwendung bietet eine Möglichkeit, bis zu setzen, wenn es zum ersten Mal verwendet?
  2. Wie kann man vorab bevölkert die Datenbank mit Daten? Beachten Sie, dass dies eine gültige Frage unabhängig von der Antwort auf Teil 1:. Es andere Nutzungsszenarien sind für Pre-Population als Admin-Benutzer

(1), es scheint, dass der erste Nutzer der Einrichtung aus der Anwendung selbst ist ziemlich viel zusätzliche Arbeit, für die Funktionalität, die per Definition ist, so gut wie nie verwendet. Es kann jedoch etwas sicherer sein, da es den Benutzer zwingt, ein Passwort ihrer Wahl zu setzen. Die beste Lösung ist in zwischen diesen beiden Extremen: haben Sie ein Skript (oder Rake Aufgabe, oder was auch immer) die anfänglichen Benutzer einzurichten. Das Skript kann dann eingerichtet werden, automatische Auffüllen mit einem Standardkennwort während der Entwicklung und ein Passwort erfordern während der Produktion Installation / deployment eingegeben werden (wenn Sie ein Standardkennwort für den Administrator entmutigen wollen).

(2), wie es scheint, dass es eine Reihe von guten, gültigen Lösungen. Eine Rake Aufgabe scheint eine gute Art und Weise, und es gibt einige Plugins dies noch einfacher zu machen. Schauen Sie einfach einige der anderen Antworten zu sehen, die Details von denen:)

Andere Tipps

Versuchen Sie, eine Harke Aufgabe. Zum Beispiel:

  1. Erstellen Sie die Datei /lib/tasks/bootstrap.rake
  2. In der Datei, fügen Sie eine Aufgabe Ihre Standard-Benutzer zu erstellen:

    namespace :bootstrap do
      desc "Add the default user"
      task :default_user => :environment do
        User.create( :name => 'default', :password => 'password' )
      end

      desc "Create the default comment"
      task :default_comment => :environment do
        Comment.create( :title => 'Title', :body => 'First post!' )
      end

      desc "Run all bootstrapping tasks"
      task :all => [:default_user, :default_comment]
    end
  1. Dann, wenn Sie Ihre App zum ersten Mal sind eingerichtet haben, können Sie rake db tun: wandern OR rake db: schema: load, und dann Bootstrap Sie rechen. Alle

Mit db/seed.rb in jeder Rails-Anwendung gefunden.

Während einige Antworten gegeben oben von 2008 kann gut funktionieren, sie sind ziemlich veraltet und sie sind nicht wirklich Rails Konvention mehr.

Bestücken Anfangsdaten in der Datenbank sollte mit db/seed.rb Datei durchgeführt werden.

Es funktioniert wie eine Ruby-Datei.

Um zu erstellen und ein Objekt zu speichern, können Sie so etwas tun:

User.create(:username => "moot", :description => "king of /b/")

Sobald Sie diese Datei bereit, können Sie Folgendes tun

rake db:migrate

rake db:seed

oder in einem Schritt

rake db:setup

Ihre Datenbank sollte mit bevölkert werden je nachdem, welche Objekte Sie in seed.rb

schaffen wollte

Ich empfehle, dass Sie nicht einfügen neue Daten in Migrationen. Stattdessen werden nur vorhandene Daten in Migrationen verändern.

Für die anfängliche Einfügen von Daten, empfehle ich Ihnen YML verwenden. In jedem Rails-Projekt I-Setup, erstelle ich ein Leuchten Verzeichnis unter dem DB-Verzeichnis. Dann erstelle ich YML Dateien für die Anfangsdaten wie YML-Dateien für die Testdaten verwendet werden. Dann füge ich eine neue Aufgabe, die Daten aus den YML Dateien zu laden.

lib / Aufgaben / db.rake:

namespace :db do
  desc "This loads the development data."
  task :seed => :environment do
    require 'active_record/fixtures'
    Dir.glob(RAILS_ROOT + '/db/fixtures/*.yml').each do |file|
      base_name = File.basename(file, '.*')
      say "Loading #{base_name}..."
      Fixtures.create_fixtures('db/fixtures', base_name)
    end
  end

  desc "This drops the db, builds the db, and seeds the data."
  task :reseed => [:environment, 'db:reset', 'db:seed']
end

db / Einrichtung / users.yml:

test:
  customer_id: 1
  name: "Test Guy"
  email: "test@example.com"
  hashed_password: "656fc0b1c1d1681840816c68e1640f640c6ded12"
  salt: "188227600.754087929365988"

Dies ist meine neue Lieblingslösung, die die Edelsteine ​​Populator und Faker verwendet:

http://railscasts.com/episodes/126-populating-a-database

Versuchen Sie, die Samen-fu Plugin, das durchaus ein einfaches Plugin ist, dass Sie Daten auf Saatgut ermöglicht (und das seed-Daten in Zukunft ändern), lassen Sie auch umgebungsspezifische Daten und Daten für alle Umgebungen Saatgut.

Ich denke, die beste Option ist die Nummer 3, vor allem, weil auf diese Weise wird es keine Standard-Benutzer sein, die eine gute Möglichkeit ist, zu machen, sonst gute Sicherheit nutzlos.

Betrachten Sie die Schienen-Konsole. Gut für einmalige Admin-Aufgaben, bei denen es nicht der Mühe wert ist, einen Skript oder Migration einzurichten.

Auf Ihrer Produktionsmaschine:

script/console production

... dann ...

User.create(:name => "Whoever", :password => "whichever")

Wenn Sie diesen erste Benutzer mehr sind zu erzeugen als einmal, dann könnten Sie auch ein Skript in RAILS_ROOT / script hinzufügen / und es von der Kommandozeile auf Ihrer Produktionsmaschine laufen oder über eine Capistrano Aufgabe.

Die Rake Aufgabe kann durch die db-Bestücken-Plugin zur Verfügung gestellt werden:

http://github.com/joshknowles/db-populate/tree/master

Große Blog-Post auf diese: http://railspikes.com/2008/2/1/loading-seed- Daten

Ich war mit Jay Vorschlägen einer speziellen Reihe von Armaturen, aber schnell fand ich Daten zu schaffen, die Modelle mit direkt nicht möglich wäre (unversionierte Einträge, wenn ich acts_as_versioned wurde unter Verwendung)

Ich würde hält es in einer Migration. Während es das Schema zu verwenden, für die erste Setups empfohlen wird, ist der Grund dafür, dass es schneller, wodurch Probleme vermieden werden. Eine einzelne zusätzliche Migration für die Daten sollten in Ordnung sein.

Sie können auch die Daten in der Schemadatei hinzuzufügen, wie es das gleiche Format wie Migrationen ist. Sie würden nur die Auto-Generation-Funktion verlieren.

Für Benutzer und Gruppen, die Frage nach den bereits bestehenden Benutzern soll eher in Bezug auf die Anforderungen der Anwendung definiert werden als die Zufälligkeiten der Programmierung. Vielleicht Ihre Anwendung erfordert einen Administrator; dann vorab ausgefüllt. Oder vielleicht auch nicht - dann Code hinzufügen graziös für einen Benutzer-Setup beim Start der Anwendung Zeit zu fragen.

Auf der allgemeineren Frage, es ist klar, dass viele Rails Anwendungen von vorausgefüllt Datum profitieren können. Zum Beispiel kann eine US-Adresse Halte Anwendung und enthalten alle Staaten und ihre Abkürzungen. Für diese Fälle Migrationen Ihr Freund ist, glaube ich.

Einige der Antworten sind veraltet. Da Rails 2.3.4, gibt es eine einfache Funktion namens Seed in db/seed.rb:

#db/seed.rb
User.create( :name => 'default', :password => 'password' )
Comment.create( :title => 'Title', :body => 'First post!' )

Es stellt eine neue Rake Aufgabe, die Sie nach Ihrer Wanderung können Sie Daten laden:

rake db:seed

Seed.rb ist eine klassische Ruby-Datei, jede klassische Datenstruktur zu verwenden, fühlen Sie sich frei (array, Hashes, etc.) und Iteratoren Daten hinzugefügt werden:

["bryan", "bill", "tom"].each do |name|
  User.create(:name => name, :password => "password")
end

Wenn Sie mit UTF-8-Zeichen hinzufügen Daten wollen (sehr häufig in Französisch, Spanisch, Deutsch, etc.), vergessen Sie nicht am Anfang der Datei hinzufügen:

# ruby encoding: utf-8

Dieses Railscast ist eine gute Einführung: http://railscasts.com/episodes/179-seed -Daten

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top