如何让unicorn在路径下运行Rails 3.0应用程序?

我正在从Passenger迁移到Unicorn,而使用Passenger,我曾经使用RailsBaseURI选项运行我的Rails 3.0应用程序,例如使用’/ blah’为所有URL添加前缀。

在Unicorn下运行相同的应用程序时,我将’–path / blah’传递给unicorn_rails,但服务器仍然提供http:// server:3000 / etc / etc ,而不是http:// server:3000 / blah / etc / etc – 我看到一些资产是通过/ blah /请求的(比如JS文件,等等),但各种链接在它们之前仍然没有’/ blah /’。

所以 – 总结一下 – 如何让Unicorn在/ blah下安装我的应用程序,以便所有请求都以’/ blah’为前缀,并且所有链接和资产都是以’/ blah /’为前缀创建的?

谢谢

这是我发现的:

要获取Rails应用程序来提供资产和链接URL,您必须在开始之前设置环境变量:

ENV['RAILS_RELATIVE_URL_ROOT'] = '/prefix' 

然后,正如@ d11wtq所说,为了让机架兼容的服务器(在这种情况下,Unicorn)实际上在前缀下服务应用程序,你必须在你的config.ru文件中,而不是通常的运行线,做以下:

 run Rack::URLMap.new( ENV['RAILS_RELATIVE_URL_ROOT'] => Rails.application ) 

我相信在你的config.ru中添加这样的东西应该这样做:

 require ::File.expand_path('../config/environment', __FILE__) run Rack::URLMap.new( "/blah" => Rails.application ) 

未经测试

简单可靠的解决方案是在前端设置中设置前缀。

以乘客+ 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; }