Ember Cli通过照明策略进行部署

时间:2016-05-27 06:39:24

标签: nginx ember.js amazon-s3 redis ember-cli

我们使用Lightning Deploy策略部署了我们的Ember App,其中包括:

  • EC2实例
  • Nginx(HTTP Server)
  • Redis,在同一个实例上配置(提供index.html)
  • 从AWS S3编译js和资产

当点击实例时,index.html从Redis获得服务,随后在点击App中的任何路由时,App路由将被提供。

但是,当我们在Ember App的URL中手动输入任何正确的路由时,Nginx会抛出错误,指出找不到路由。我们在这里做错了什么?

2 个答案:

答案 0 :(得分:3)

当使用网址命中子请求(例如mydomain.com/login或刷新页面)时,浏览器会向nginx发送请求,而nginx将无法找到login在任何地方找到页面并返回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 (/)位置(root位置从redis提供索引页)并找到所请求的页面。 last选项尝试通过重新访问nginx中定义的所有blocks来查找特定页面,因此它可以转到根位置。 可以找到详细说明和完整的nginx配置here

答案 1 :(得分:2)

如果我正确理解你,你需要让所有路由都搞砸了。

当你点击index.html时,redis会为实例提供服务,但当你点击任何其他网址时,你需要告诉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策略,我不得不创建一个路由/*,它获取路由到我的控制器,然后控制器从redis中检索索引。