最简单的方法是将Ember应用程序关闭以进行维护

时间:2016-09-21 21:50:20

标签: ember.js amazon-s3

我有一个从S3提供的Ember.js应用程序,使用ember-cli-deploy上传。它有一个Rails后端,我不时会进行维护。在此期间,我希望我的ember应用程序将每个路由重定向到“正在维护”页面。

我可以在Ember框架内执行此操作,还是最好暂时用静态文件替换S3上的index.html?

3 个答案:

答案 0 :(得分: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或您从服务器发送到Ember应用程序的任何内容无法访问,因此Ember无法解析它将重定向到另一个页面。

希望我能正确解释,你理解我的意思。

答案 1 :(得分:1)

您可以在Ember应用程序中完成一些工作。

如果您的API服务器返回可识别状态,请说503 code,您可以使用API​​调用规则使用路由maintenance重定向到actions路由,或者使用已加载的内容。 这允许您的Ember应用程序为具有静态或缓存数据的页面提供服务,以便无缝浏览,从而改善用户体验。 当然,如果您的停机时间相当短(几秒钟),这很好。

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

答案 2 :(得分:0)

创建一个初始化程序,该初始化程序重新打开Ember.Route并转换为beforeModel挂钩中的“停机维护”路由(在调用super之前):

import Ember from 'ember';

var initialize = function(/* container, app */) {
Ember.Route.reopen({
    beforeModel: function() {
        this.transitionTo('down-for-maintenance');
        this._super();
      }
  });
};

export default {
  name: 'maintenance-redirect',
  initialize: initialize
};

完成后将其删除。