2012-12-09 32 views
1

我已经开始使用模块化风格编写我的Sinatra应用程序suggested in this stackoverflow answer,并且已经成功将它部署到Heroku,但是当试图部署到AppFog时(除了datamapper mysql/postgres gem )我已经定义了每条路线的“未找到”错误。Sinatra模块化应用程序无法识别AppFog上的路线

== Sinatra/1.3.3 has taken the stage on 47195 for production with backup from Thin 
myIP, 127.0.0.1 - - [08/Dec/2012 21:28:53] "GET/HTTP/1.0" 404 18 0.0030 
myIP, 127.0.0.1 - - [08/Dec/2012 21:28:54] "GET /any_route HTTP/1.0" 404 18 0.0010 
myIP, 127.0.0.1 - - [08/Dec/2012 21:28:58] "GET /about HTTP/1.0" 404 18 0.0008 

我的观点和公共路径从设置:

settings.views = "./views" 
root = "." 
settings.sin_auth_view_path = "/mnt/var/vcap.local/dea/apps/myapp-0-d1d1d1dc0e543b1759afda27b/app/views/" 
public_folder = "./public" 

定义途径的实例:

class MyApp < Sinatra::Application 
    get '/' do 
    @title = "Site Index Page" 

    haml :index 
    end 
end 

Config.ru

require ::File.join(::File.dirname(__FILE__), 'app') 

run MyApp.new 

结构是基本相同与上面链接。

没有应用程序错误,只有“Not Found”消息和相应的404“GET”条目在日志中。 PUBLIC文件夹正常工作 - 我可以访问站点url上的所有静态文件(即site.com/img/anypic.jpg)。而且,正如我所提到的,完全相同的应用程序在Heroku上运行得非常完美。

我正在使用捆绑软件包,因此可以使用自定义的gem,直到切换到模块化结构才有问题。

安装在AppFog Ruby 1.9.3 Runtime上。

思考....

回答

1

由于在AppFog谷歌用户组的用户,该解决方案是部署为机架应用程序而不是西纳特拉应用。

注:另外,还要确保使用--runtime ruby193命令行选项,如果你正在使用require_relative :)

0

我会检查,看看是否你可能会具有与该“settings.sin_auth_view_path”条目的问题,因为它是一个绝对路径(而另外两个是相对的)。 Heroku没有正常的文件系统布局,当您在应用程序源代码之外登陆时,您曾经在开发框中看到过这种布局。

+0

如果Heroku上没有一个正常的文件系统布局,它为什么在那里工作,我的本地系统然后?问题是它不适用于AppFog。但我会尝试将“settings.sin_auth_view_path”更改为相关的,并查看是否有所作为...并报告回来。谢谢。我也可以尝试直接在AWS EC2实例(Bitnami Ruby 193 AMI)上进行安装,以了解具体情况。 –

+0

您能否指出我对Heroku文件系统差异的解释?谢谢。 –

+0

查看[this](https://devcenter.heroku.com/articles/dynos#ephemeral-filesystem)。这不是超级描述性的,但基本上本地文件可以随时消失,并且无法访问应用程序源代码树之外。 – mjbraun

相关问题