[英]Rails routing / assets with proxied location
好的-我在Dreamhost VPS上的一个域上有一个Rails应用程序,我们称其为“ railsapp”(在该域上,我有其他域,其中一些为“静态”域,并且提供perl / CGI脚本)。
出于明显的原因,Passenger无法在端口80上运行,并且当前正在端口8001上运行此应用程序。我有一个代理(在Apache中配置),可以将http://DOMAIN/books
请求路由到DOMAIN:8001/
(顺便说一下,它可以用作DOMAIN/railsapp
)。
问题:
1)没有资产被提供-尽管样式表确实存在于[railsapp]/public/assets
,但样式表404的请求仍然存在。 我尝试了预编译而不是预编译的所有可能组合,但似乎没有任何效果。
2)链接无法正常运行。 通过端口8001显式访问的链接可以正常工作,例如DOMAIN:8001/about
显示“关于”页面,而DOMAIN:8001/[railsapp]/[:id]
将我带到相应的项目。 同样,通过显式访问(即通过在地址栏中手动键入地址)进行访问, DOMAIN/books/[railsapp]/[:id]
和DOMAIN/books/about
可以很好地工作。 但是DOMAIN/books
的链接(指向由id标识的项目)都指向DOMAIN/[railsapp]/[:id]
,这给了我404。 同样指向DOMAIN/about
“ about”链接也不起作用。
现在! 如果我一头雾水而将我的VPS切换为使用nginx而不是Apache,那你猜怎么着? 路径大部分有效! 由id标识的项目链接为DOMAIN/books/[railsapp]/[:id]
,“ about”链接为DOMAIN/books/about
,这很棒。 Rails应用程序中的唯一问题是,返回根目录的链接会被莫名其妙地呈现为127.0.0.1:8001
链接。 这很烦人,但似乎很难解决。 与此相关的一个问题是-您可能从本文开头就已经记住了这一点-VPS还托管了一个使用perl / CGI的站点,并且由于nginx并不是真的要处理perl / CGI,所以这真是太糟糕了。 因此,我坚持使用Apache,以便CGI保持不间断。
我已经以许多不同的方式来寻找这个问题很多次了 。 我可能已经看过您想与我建立链接的任何stackoverflow问题或博客文章。 鉴于上述信息,如果您对解决路径和资产问题有任何想法,请告诉我。
尝试在“类Application <Rails :: Application”中的application.rb中:
config.action_controller.default_url_options = {host: 'DOMAIN/books', port: 80}
config.action_controller.asset_host = 'DOMAIN/books'
config.serve_static_files = true # for rails4; for rails3 use .serve_static_assets = true
之后,重新启动您的应用程序。
确保应用程序到处都使用* _url-helpers而不是* _path-helpers(即root_url而不是root_path)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.