我正在从Passenger迁移到Unicorn,而使用Passenger我曾经使用RailsBaseURI选项运行我的Rails 3.0应用程序,例如以'/ blah'为所有网址加前缀。
在Unicorn下运行相同的应用时,我将'--path / blah'传递给unicorn_rails,但服务器仍然提供http://server:3000/etc/etc,而不是http://server:3000/blah/etc/etc - 我看到一些资产被请求via / blah /(就像JS文件一样),但各种链接在它们之前仍然没有'/ blah /'。
所以 - 总结一下 - 如何让我的应用程序在/ blah下安装我的应用程序,以便所有请求都使用'/ blah'前置于路径,并且所有链接和资产都是以'/ blah /'为前缀创建的它们?
由于
答案 0 :(得分:4)
以下是我发现的内容:
要获取Rails应用程序来提供资产和链接URL,您必须在开始之前设置环境变量:
ENV['RAILS_RELATIVE_URL_ROOT'] = '/prefix'
然后,正如@ d11wtq所说,为了让机架兼容的服务器(在这种情况下,Unicorn)实际为前缀下的app提供服务,你必须在你的config.ru文件中,而不是通常的运行行,执行以下操作:
run Rack::URLMap.new(
ENV['RAILS_RELATIVE_URL_ROOT'] => Rails.application
)
答案 1 :(得分:3)
我相信在你的config.ru中添加这样的东西应该这样做:
require ::File.expand_path('../config/environment', __FILE__)
run Rack::URLMap.new(
"/blah" => Rails.application
)
未测试
答案 2 :(得分:1)
简单可靠的解决方案是在前端设置中设置前缀。
以乘客+ nginx为例,您可以使用以下内容:
server {
listen 80;
server_name www.phusion.nl;
root /websites/phusion;
passenger_enabled on;
passenger_base_uri /prefix;
}
源代码无需更改,一行设置。
但是你说你正在使用unicorn
,你正在使用哪个前端?
使用nginx是可能的,例如:
location /prefix {
rewrite ^/prefix/(.*) /$1 break;
proxy_pass http://localhost:8000;
}