2016-09-21 55 views
2

我有一个Ember.js应用程序从S3服务,使用ember-cli-deploy上传。它有一个Rails后端,我不时需要维护。在此期间,我希望我的应用程序将每条路线重定向到“正在维护”页面。使Ember应用程序停机维护的最简单方法

我可以在Ember框架内做到这一点,还是我最好用静态文件临时替换S3上的index.html?

回答

1

你可以在你的Ember应用程序中实现一点点工作。

如果你的API服务器返回一个可识别的状态,比方说,一个503 code,为您的API调用中使用路由actions重定向到您的maintenance路线,或者使用已经加载的内容,您可以使用规则。 这允许您的Ember应用程序为静态或缓存数据的页面提供服务,以保持无缝浏览,从而改善用户体验。 这当然,如果你的宕机时间很低(几秒钟)就没有问题。

SEO聪明,如果您还想让内容暂时不可用于蜘蛛,您可能需要在您的Web服务器(nginx,apache ...)上设置自定义规则。这也避免了加载整个Ember堆栈。

2

好吧,最简单的方法将是你建议的方式(替换索引)。但是,如果您愿意,我可以为您提供另一种方案,但需要一些时间来实施。

使用beforeModel()

我不知道,如果你正在使用的身份验证和授权,但是,这可以帮助你。例如,你可以得到需要由Token验证的Session(在我的情况下是Server),如果它是无效的,我会将每个人重定向到一个登录页面,但是你可以将它改为UC。

// route/login.js // this can be in other page as well 
import Ember from 'ember'; 

export default Ember.Route.extend({ 
    session: Ember.inject.service(), 
    beforeModel() { 
    if(this.get('session.isAuthenticated')) { 
     this.transitionTo('index'); // as you can see if session is authenticated I will redirect it to index but if not all pages will remain in the same page which is login. 
    } 
    } 
}); 
在你的application.js

让您轻松

this.get('session') 

,然后,如果它的确定,那么你可以将用户重定向到相应的页面,但如果它不是你可能要重定向你可以授权它它在别的地方。

记住,如果你想无效会话,你可以很容易地使用

session.invalidate(); 

总之,你可以很容易使你的令牌API或任何你从服务器发送到您的灰烬应用程序无法访问,以便灰烬无法解决它将重定向到另一个页面。

希望我能正确解释,并且明白我的意思。

相关问题