2014-09-28 107 views
1

我使用nginx在Amazon EC2 Ubuntu上部署了流星应用(bundle)。我需要在example.com/myapp上运行我的应用程序。 我用:使用nginx错误部署到子文件夹的流星

export ROOT_URL='http://example.com/myapp' 

我的nginx的部分:

server { 
    listen 80; 
    server_name: example.com; 

    location /myapp { 
     proxy_pass http://localhost:3000; 
    ... 

但我发现了错误:

Exception in defer callback: Error: Oh no! No route found for path: "/myapp/" 

和:

GET http://example.com/cfs/servertime 404 (Not Found) 
GET http://example.com/font/myfont 404 (Not Found) 

如何解决呢?

回答

1

事情是与nginx,它可以帮助你解决它的服务器端路由位,但它不能帮助客户端路由(因为浏览器计算这一点)。

除了将您的客户端路由前缀到/myapp/之外,没有别的选择。

由于nginx会为您发送路由,因此您可以将服务器端路由保持原样。

+0

谢谢。 是否有可能将我的客户端流星(Iron Route)中的路由添加到/ myapp/automaticaly而不是通过向每个路由添加“myapp /”? 有没有可能nginx发送流星请求,如“example.com/path”而不是“example.com/myapp/path”? – 2014-09-28 12:43:51

1

是的,在铁路路由器中,您可以使用变量作为前缀路径。在这里看到我的用法https://github.com/c316/give/blob/master/both/router/routes.js。基本上你只需在路由的数据部分声明变量,然后在路径中使用:variableName。

+0

谢谢乔希! 我需要在每个路由中声明这个变量?为什么更好,那么只需在每条路线上添加“myapp /”? 并且此解决方案是否解决公用文件夹中客户端路由的问题? – 2014-09-29 04:53:51

+0

您可以在路径文件夹中添加myapp /,但如果我有一个开发应用程序,我在不同的子文件夹中运行,我喜欢使用该变量。这样我不必更改该名称的每个实例,只需在我的settings.json文件中运行一个不同的名称即可。客户端路由到公用文件夹只需要使用相同的过程。所以如果我链接到一个图像,我做Meteor.settings.root +'/images/check_image.png'。如果您只是将/ myapp预先添加到路径中,您将进入公共目录。这是你问的吗? – JoshJoe 2014-09-29 06:05:32

+0

是啊!非常感谢。但是你的回答给出了更多的问题) 1.我可以在每个路由中只定义一次root var吗? 2.那么Router.go('路径')呢?如何实现Router.go(':root/path')? 3.在我的模板中,我使用''。如何在那里添加根路径? 4.我使用FS.Store.FileSystem FS.Collection存储。如何在那里添加根路径? 很抱歉,如果这些问题很愚蠢,但这一切都不适合我。 – 2014-09-29 07:46:29