2016-09-20 46 views
1

我在我的應用程序兩種模式利用Friendly_id寶石的現場應用程序(它使應用程序的URL是更具描述性和用戶友好。新安裝紅寶石寶石Friendly_Id沒有更新該已部署通過Heroku的

中的政治家型號:

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 

和問題型號:

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 

背景故事:該應用程序最初並不是將寶石安裝到Heroku。我構建了應用程序並將其部署到Heroku,然後我遇到了Friendly_ID gem。發現它之後,我在gemfile中安裝了gem,調整了上述模型和控制器,並且它在我的本地服務器上運行得非常好。

我以爲我是全部設置。我在Heroku上重新播種了我的數據,並將其推廣,但這些更改不會顯示在現場。並因此而不是使用廢料場每個模型像這樣:

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

我仍然看到:

www.mysite.com/politicians/7(奧巴馬的政治人物ID號)
www.mysite.com/issues/3(對於 「經濟」 問題上的ID號)

更多背後的故事:

我在StackOverflow上查看the gem's docs甚至a few questions here,他們都說如果您將gem添加到預先存在的應用程序,然後在Heroku控制檯中爲應用friendly_id gem的每個模型運行此代碼於:

heroku run console 

然後:

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

這並不起作用: - /我的應用程序仍然沒有更新語義友好的URL。我還應該補充說,我最初使用了寶石的輔助模塊。所以,我有:

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

但提到刪除「幫手」關鍵字(?,然後將其保存後重新添加)有人on this StackOverflow thread,因爲這可能會阻止它更新在Heroku。我還沒有嘗試過(保存後重新添加「助手」的關鍵字,但我想提出我的問題,然後我浪費了一天的嘗試,而不是工作。

請幫助:-)

+0

你是否遷移了你的heroku db以添加「slug」列?一切工作在當地:生產環境還是本地:發展? – eeeeeean

+0

是的,當我在筆記本電腦上的服務器上本地運行應用程序時,一切正常。 「本地:生產環境」與「本地:發展」之間有什麼不同? –

+0

是的,我運行我的heroku數據庫:heroku run rake db:migrate –

回答

0

它添加到politician.rb

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

和它從/政治家/ 7 /政治家/巴拉克-奧巴馬politicians_controller重定向。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

我回答我的問題 - 我想通了這個Stackover flow thread的幫助。

我把它通過確保我的本地數據庫的版本匹配了在Heroku上的數據庫版本在我住的Heroku應用程序更新:

要知道本地數據庫的版本做:

$耙分貝:版本

然後拿你的本地版本,並確保您有它的Heroku中通過執行以下操作:

$ Heroku的運行rake --trace分貝:遷移VERSION = 20151127134901

這需要將數據庫遷移到Heroku,並使用「本地遷移的相同版本」。