我的设置:
使用--prefix /foobar
在端口1234上运行瘦身
apache在端口80上运行
apache反向代理/foobar
在端口1234上精简
我希望静态资产不会通过代理提供给瘦身,而是通过apache直接在/assets
提供服务。
我必须使用相对路径,因为我在启动之前不知道rails应用程序的主机名/ ip(它是应该能够移动的app-in-a-box)。
我在config.action_controller.asset_host
中找到production.rb
,但我无法将其设置为相对路径。当我这样做时会感到困惑并创建真正虚假的URL。
我该如何做到这一点?
答案 0 :(得分:1)
您无需通过环境中的配置块调用它,您可以从应用程序控制器调用它,这样您就可以访问请求对象。所以你可以这样做:
class ApplicationController < ActionController::Base
before_filter :set_asset_url
def set_asset_url
ActionController::Base.asset_host = "http://#{request.host}"
end
end
感觉有点hackish,但我知道没有更好的方法。
如果你需要担心ssl和不同的端口,你可能会发疯:
ActionController::Base.asset_host = "http#{request.ssl? ? 's' : ''}://#{request.host_with_port}"
答案 1 :(得分:1)
这在某种程度上取决于您的服务器环境,但基本上您需要的内容与此处描述的内容类似:http://blog.codahale.com/2006/06/19/time-for-a-grown-up-server-rails-mongrel-apache-capistrano-and-you/
答案 2 :(得分:0)
首先,我要感谢Geoff和darkliquid。我采用了darkliquid的链接并对其进行了处理以使其适用于我的情况。最大的挑战是我没有从网络服务器的根目录提供rails应用程序。
注意:
thin
在端口9999上使用--prefix '/railsapp'
运行。LA-U
(预见)来获取apache将使用的最终文件名。IS_SUBREQ
检查是为了防止前瞻(子请求)返回代理。/railsapp/index.html
重写是必需的,因为否则我的apache conf中的另一条规则会将其重写为/index.html
,这是默认的'这里就是这里的'页面;不过,404
在其他地方提供。以下是apache配置的相关部分:
# Only proxy the thin stuff.
<Proxy /railsapp/*>
Order deny,allow
Allow from all
</Proxy>
## Add an alias for filename mapping.
Alias /railsapp "/website/root/railsapp/public"
## We need the Rewrite Engine for this.
RewriteEngine on
<IfDefine debug>
## If debugging, turn on logging.
RewriteLogLevel 9
RewriteLog "/website/logs/http.rewrite.log"
</IfDefine>
## Check for a static root page.
RewriteRule ^/railsapp/?$ /railsapp/index.html [QSA]
## Check for Rails caching.
RewriteRule ^(/railsapp/[^.]+)$ $1.html [QSA]
## Redirect all non-static requests to Rails.
# Don't proxy on sub-requests (needed to make the LA-U work).
RewriteCond %{IS_SUBREQ} false
# Use look-ahead to see if the filename exists after all the rewrites.
RewriteCond %{LA-U:REQUEST_FILENAME} !-f
# Proxy it to Rails.
RewriteRule ^/railsapp(.*)$ http://127.0.0.1:9999%{REQUEST_URI} [P,QSA,L]
## Make sure Rails requests are reversed correctly.
ProxyPassReverse /railsapp http://127.0.0.1:9999/railsapp
## Disable keepalive; railsappd doesn't support them.
SetEnv proxy-nokeepalive 1