【发布时间】:2015-06-18 21:38:17
【问题描述】:
我想在 Angular UI-router 中添加漂亮的 URL。我在一个以 Angular JS 作为前端的 Rails 应用程序上安装了 Nginx + Unicorn。
我想要漂亮的 URL,例如 mysite/a/b/c,没有“#”,也没有 hashbang。当我将 nginx 的位置更改为:
server {
server_name yoursite.com;
root /path/to/app;
location / {
try_files $uri $uri/ @unicorn;
}
}
Unicorn 会抛出这个错误:
“/path/to/app”的目录索引被禁止
关于如何设置 nginx 重定向的任何想法?我认为将 chmod 提供给我的应用程序路径并不是一个好的解决方案..
编辑: 问题是使用 try_files $uri/index @unicorn,它可以工作,例如url.com/a/b。但是当我刷新时,它会自动将我重定向到根 url.com。 UI-router 建议 try_files $uri $uri/ /index.html,但是当我这样做时,我得到了 nginx 拒绝的访问。文件夹 /path/to/app 属于用户 'deploy',所以这不是 chmod 问题..
【问题讨论】:
-
您的应用程序必须有权访问
/path/to/app中的文件,如root指令中所设置。至少在我的情况下,我从作为这些文件所有者的同一用户运行我的 Rails/Unicorn 应用程序。 -
更改独角兽root权限安全吗?
-
对不起,亚历克斯,我想我不明白 - 你能再解释一下吗?我认为您不需要更改任何权限,只需在适当的用户下和应用程序文件夹中运行 unicorn。可能还有其他方法可以做到,但这是我的方法。
-
我使用 Chef 和 AWS opsworks 运行它。源/根文件夹位于 /srv/app/.../public。然后 chef 获取这些文件并与用户“部署”到 /srv/app/.../shared 一起部署。现在,如果规则是 try_files $uri/index $uri/index.htm @unicorn;我的应用程序运行良好,所以这是奇怪的部分(当然没有 html5 /a/b/ 链接,但有 /#/a/b)。我的根文件夹中没有任何 index.html,我不明白它为什么会起作用!!您的解决方案/建议是否由用户'deploy' chown /srv/app/...public 下的文件?
-
我使用
mina来管理我的部署,但我认为它类似于Chef。当我部署时,mina从 git 中提取我的文件并在/home/myapp/app/current/public中构建它们,并使用户myapp拥有。这是我的公共 Rails 目录——它有资产和一些静态错误页面文件,如 404.html——也是我的 NGINX 根指令指向的地方。要启动/重新启动应用程序,我运行/etc/init.d/unicorn.myapp,其中执行 su - myapp 以在 myapp 下运行 Unicorn。 Rails 路由器处理从这个公共目录到应用程序/控制器等的请求路由。
标签: ruby-on-rails angularjs nginx angular-ui-router unicorn