2016-09-20 1 views
1

Ich habe zwei Modelle in meiner Anwendung, die Verwendung des Friendly_id Juwel machen (es so, dass der App-URLs sind beschreibend und benutzerfreundlich.Neu installierte Ruby-Gem Friendly_Id aktualisiert Nicht Live-App, die Via Heroku

Eingesetzt ist Ein Politiker Modell:

class Politician < ActiveRecord::Base 
    has_many :interests 
    has_many :issues, through: :interests 

    validates :name, :political_party, :title, :slug, presence: true 

    extend FriendlyId 
    friendly_id :name, use: :slugged 
end 

und eine Ausgabe Modell:

class Issue < ActiveRecord::Base 
    has_many :interests 
    has_many :politicians, through: :interests 

    validates :name, :slug, :keywords, presence: true 

    extend FriendlyId 
    friendly_id :name, use: :slugged 
end 

Zurück Geschichte: Die App war nicht von Anfang an mit dem Juwel nach Heroku geschoben. Ich habe die App erstellt und sie auf Heroku verteilt, und dann bin ich auf das Juwel Friendly_ID gestoßen. Nachdem ich es entdeckt hatte, installierte ich den Edelstein in meinem Gemfile, optimierte die oben genannten Modelle und Controller und es funktioniert wunderbar auf meinem lokalen Server.

Ich dachte, ich war alles bereit. Ich habe meine Daten auf Heroku neu gesetzt und hochgedrückt, aber die Änderungen werden auf der Live-Site nicht angezeigt. Und so stattdessen die Schnecke Feld wie so für jedes Modell der Verwendung:

www.mysite.com/politicians/barack-obama
www.mysite.com/issues/economy

Ich sehe nach wie vor:

www.mysite.com/politicians/7 (Barack Obamas Politiker ID-Nummer)
www.mysite.com/issues/3 (die ID-Nummer für die "Economy" Ausgabe)

Mehr Back Story:

ich the gem's docs sah und sogar a few questions here auf Stackoverflow, und sie alle sagten, dass, wenn Sie den Edelstein zu einer bereits bestehenden App sind das Hinzufügen, dann für jedes Modell diesen Code in der Heroku Konsole auszuführen, die das friendly_id gem angewendet wird zu:

heroku run console 

Und dann:

Politician.find_each(&:save) 
Issue.find_each(&:save) 

, die nicht funktioniert: -/Meine App ist mit semantischen freundlichen URLs noch nicht aktualisiert. Ich sollte auch hinzufügen, dass ich zuerst das Hilfsmodul des Edelsteins benutzt habe. Und so hatte ich:

friendly_id :name, use: [:slugged, :history] 

Aber jemand on this StackOverflow thread erwähnt die „Helfer“ Schlüsselwort entfernen (? Und dann erneut hinzufügen nach dem Speichern), denn das kann er von der Aktualisierung auf Heroku werden verhindert. Ich habe das noch nicht versucht (das "Helfer" Schlüsselwort nach dem Speichern wieder hinzufügend, aber ich wollte meine Frage stellen, bevor ich einen anderen Tag des Versuchs verschwendet habe und es nicht funktioniert.

Hilfe bitte :-)

+0

Haben Sie Ihre heroku-Datenbank migriert, um die Spalte "slug" hinzuzufügen? Funktioniert alles in Ihrer lokalen Umgebung: Produktionsumgebung sowie lokal: Entwicklung? – eeeeeean

+0

Ja, alles funktioniert perfekt, wenn ich die App lokal auf dem Server auf meinem Laptop starte. Was ist der Unterschied zwischen "lokal: Produktionsumgebung" und "lokal: Entwicklung"? –

+0

Und ja, ich migrieren meine heroku db durch Ausführen: heroku run rake db: migrieren –

Antwort

0

es

def slug=(value) 
     if value.present? 
     write_attribute(:slug, value) 
     end 
    end 

zu politician.rb hinzufügen und von/Politiker/7/Politiker/barack-obama politicians_controller zu umleiten.rb

def set_slug_url 
    @item = (*you-model*).friendly.find(params[:id]) 
    redirect_to action: 'show', id: @item.friendly_id, status: 301 unless @item.friendly_id == params[:id] 
    end 
0

ich meine eigene Frage zu beantworten - ich habe es mit Hilfe dieser Stackover flow thread herausgefunden.

habe ich es auf meiner Live-Heroku App zu aktualisieren, indem Sie sicherstellen, dass meine lokalen Datenbank-Version mit der Datenbankversion auf Heroku abgestimmt:

die lokale db Version wissen tun:

$ rake db: Version

Dann nehmen Sie die Version, die Sie vor Ort und stellen Sie sicher, dass Sie es in Heroku indem Sie die folgenden haben:

$ Heroku laufen Rake --trace db: migrate VERSION = 20151127134901

Dadurch wird die Datenbankmigration nach Heroku mit "derselben Version der lokalen Migration" durchgeführt.

Verwandte Themen