Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何让unicorn在路径下运行Rails 3.0应用程序?_Ruby On Rails_Ruby_Rack_Unicorn - Fatal编程技术网

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

Ruby on rails 如何让unicorn在路径下运行Rails 3.0应用程序?,ruby-on-rails,ruby,rack,unicorn,Ruby On Rails,Ruby,Rack,Unicorn,我正在从Passenger迁移到Unicorn,使用Passenger,我曾经运行我的Rails 3.0应用程序,使用RailsBaseURI选项在所有URL前面加上“/blah”前缀,例如 在Unicorn下运行相同的应用程序时,我将'--path/blah'传递给Unicorn_rails,但服务器仍然充当,而不是-我看到一些资产通过/blah/(如JS文件等)请求,但各种链接前面仍然没有'/blah/' 所以-总结一下-如何让Unicorn在/blah下装载我的应用程序,以便所有请求都使用

我正在从Passenger迁移到Unicorn,使用Passenger,我曾经运行我的Rails 3.0应用程序,使用RailsBaseURI选项在所有URL前面加上“/blah”前缀,例如

在Unicorn下运行相同的应用程序时,我将'--path/blah'传递给Unicorn_rails,但服务器仍然充当,而不是-我看到一些资产通过/blah/(如JS文件等)请求,但各种链接前面仍然没有'/blah/'

所以-总结一下-如何让Unicorn在/blah下装载我的应用程序,以便所有请求都使用路径前面的“/blah”,并且所有链接和资产都使用它们前面的“/blah/”创建


谢谢

我相信在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;
}
location /prefix {
    rewrite           ^/prefix/(.*)  /$1      break;
    proxy_pass        http://localhost:8000;
}
源代码中无需更改,一行设置


但是你说你用的是独角兽,你用的是哪个前端

使用nginx应该可以实现以下功能:

server {
    listen 80;
    server_name www.phusion.nl;
    root /websites/phusion;
    passenger_enabled on;
    passenger_base_uri /prefix;
}
location /prefix {
    rewrite           ^/prefix/(.*)  /$1      break;
    proxy_pass        http://localhost:8000;
}

以下是我的发现:

要使Rails应用程序服务于资源和链接URL,必须在启动前设置环境变量:

ENV['RAILS_RELATIVE_URL_ROOT'] = '/prefix'
然后,正如@d11wtq所说,要让机架兼容服务器(在本例中为Unicorn)以前缀实际为应用程序提供服务,您必须在config.ru文件中,而不是通常的运行行中,执行以下操作:

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

隐马尔可夫模型。。。。。。我不想为开发(目前没有人使用前缀)和部署使用不同的配置。。。但我想我可以为Unicorn制作一个单独的config.ru。我马上试试,谢谢。嗯。。。。发送unicorn_rails一个--path标志会导致资产被链接为/blah/etc/etc,但是其他链接和请求本身仍然通过/。你的解决方案正好相反-链接和应用程序本身现在由/blah提供,但资产仍然由/blah提供。所以我两个都做了,而且成功了!如果任何人都有一个,我仍然希望有一个更优雅的方式,即一次完成两个任务的方式,这就是问题所要求的。此解决方案可能不适用于由前端直接提供服务的静态资产。不幸的是,这不起作用,因为生成的链接没有我想要的前缀。换言之,这些链接没有/prefix/前缀,因此不起作用。我需要该应用程序生成带有/前缀/的链接。