2013-10-02 39 views
0

我有它使用的应用范围蛞蝓(使用Slugalicious gem与Sluggable表)的应用程序,并通过使用此代码路由到这些蛞蝓:Ruby on Rails的更新Heroku的动态路由

#Slugs 
    begin 
     Slug.all.each do |s| 
     begin 
      get "#{s.slug}" => "#{s.sluggable_type.downcase.pluralize}#show", :id => s.slug 
     rescue 
     end 
     end 
    rescue 
    end 

我目前更新路由时,我更新的代码段塞流模型:

after_save :update_routes 

def update_routes 
    Rails.application.reload_routes! 
end 

这工作完全在开发中:

Routes Work Well In Dev

我得到的问题是,如果我更新或创建一个新的slu,,Heroku不会更新以适应它。它在开发中工作,并且(令人困惑地),如果我在Heroku上执行“heroku运行耙路”,它就会起作用。但是,如果我尝试浏览到新网址,该应用只会显示404。如果我重新部署应用程序,所有的路线工作,这导致我相信这是与应用程序范围内的更新路线有关

This question说这是关于在Heroku上运行多个进程的事情,但我还没有找到这个。

任何想法?非常感谢提前

+0

任何原因你没有一个'/:slug'路由和一些冲突检查,以保持slu from匹配的应用程序路线? –

+0

感谢您的提问。发生什么事是,slu are都是为了特定的内容,并考虑到我有一个单独的管理区域和slu are是由一个单一的实体创建的,我认为我可以自己保持在路线之上。说实话,我还没有经历过这个问题,所以我没有必要写一个修复:) –

回答

1

修好了!

有些东西叫做“ActiveRecord Observer”,它们自Rails 4.0以来一直贬值。我发现this website解释了我想要做的事情,但它有些过时。我已经包括通过代码如下轨道4.0:

如果你使用Rails 4,使用rails-observers gem

呼叫添加到您的环境文件

#config/application.rb (can be placed into dev or prod files if required) 
config.active_record.observers = :slug_observer 

添加新观察员类插入模型文件夹中:

#app/models/slug_observer.rb 
class SlugObserver < ActiveRecord::Observer 
    def after_save(slug) 
    Rails.application.reload_routes! 
    slug.logger.info("Routes Reloaded") 
    end 

    def after_destroy(slug) 
    Rails.application.reload_routes! 
    slug.logger.info("Routes Reloaded") 
    end 
end 

The way thi一旦原始文件已经运行,它的作品就是调用这些螺栓固定功能。这使我的应用程序能够操作有问题的模型的独立功能,从而正确地更新路线。