繁体   English   中英

Rails路由/具有代理位置的资产

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM