Ember 通过 Lighting 策略进行 CLI 部署

Ember Cli Deploy via Lighting Strategy

我们已经使用闪电部署策略部署了我们的 Ember 应用程序,其中包括:

当点击实例时,index.html 从 Redis 获得服务,随后点击应用中的任何路由,应用路由获得服务。

但是,当我们在 URL 中为 Ember 应用程序手动输入任何正确的路由时,Nginx 会抛出一个错误,说找不到路由。我们在这里做错了什么?

如果我没理解错的话,你需要让 ember 到所有路由。

发生的事情是,当您点击 index.html 时,redis 服务该实例,但是当您点击任何其他 url 时,您需要告诉 nginx 服务相同的 index.html 并让ember 处理路线。

我在 Ember Discuss 上找到了这个,可能会有帮助。

server {
listen 80 default;
server_name my.domain.com;
root /path/to/app/root;

location / {
    rewrite ^ /index.html break;
}

location /assets/ {
    # do nothing and let nginx handle this as usual
}
}

我正在使用 Play Framework,我也在使用 Lighting Deploy Strategy,我必须创建一个路由 /*,它获取到我的控制器的路由,而控制器又从 redis 检索索引。

当一个子请求,比如说,mydomain.com/login 被 url 命中或者页面被刷新时,浏览器发送一个请求到 nginx 而 nginx 将无法在任何地方找到 login 页面,就会 return 一个 404 error。这是因为 nginx 无法将子路由传递给 index.html 页面,而后者又可以为子路由提供服务。为了解决这个问题,在 nginx 中使用了以下位置块。

  # This block handles the subrequest. If any subroutes are requested than this rewrite the url to root and tries to render the subroute page by passing the subroute to index file (which is served by the redis).
  location ~* / {
  rewrite ^ / last;
  }

这里我们对nginx说,对于任何子请求,将url重写到root (/)位置(根位置服务于redis的索引页面)并找到请求的页面。 last 选项尝试通过重新访问 nginx 中定义的所有 blocks 来找到特定页面,因此它能够转到根位置。 可以找到详细的解释和完整的 nginx 配置 here.