Ruby on rails 更改Rails 3开发的基本URL

Ruby on rails 更改Rails 3开发的基本URL,ruby-on-rails,ruby-on-rails-3,url-routing,webrick,Ruby On Rails,Ruby On Rails 3,Url Routing,Webrick,我知道我要将应用程序部署到一个运行基本URL的环境中,该URL如下所示: http://someserver/mydepartment/myapp http://localhost:3000/myapp http://localhost:3000/mydepartment/myapp 我的开发环境设置为使用默认Rails配置,如下所示: http://someserver/mydepartment/myapp http://localhost:3000/myapp http://loc

我知道我要将应用程序部署到一个运行基本URL的环境中,该URL如下所示:

http://someserver/mydepartment/myapp
http://localhost:3000/myapp
http://localhost:3000/mydepartment/myapp
我的开发环境设置为使用默认Rails配置,如下所示:

http://someserver/mydepartment/myapp
http://localhost:3000/myapp
http://localhost:3000/mydepartment/myapp
我想在我的开发环境中对此部署路径进行建模。也就是说,我想开发一个基本URL,如下所示:

http://someserver/mydepartment/myapp
http://localhost:3000/myapp
http://localhost:3000/mydepartment/myapp
这样,我可以使我的所有URL都与“/”相关,并且它们在两种环境中都可以工作

我如何更改它,使我的应用程序在我的开发环境中按此路径运行

我找到了解决方案,但不适合我:

  • routes.rb中设置
    scope
    似乎对
    public
    中的静态内容不起作用
  • 使用Apache的重写功能。我不想在我的开发箱上安装Apache。理想情况下,该解决方案将与WEbrick一起工作,尽管我似乎让Mongrel也能正常工作(Mongrel和Ruby 1.9.2存在一些问题)
  • 设置
    relative\u url\u root
    以及与Rails 3不兼容的类似建议
  • 动态生成CSS/JavaScript并调整路径以在开发和生产环境之间进行补偿

在config/environment.rb的末尾添加以下行

ActionController::Base.relative_url_root = "/mydepartment"

您可以尝试将rails应用程序框架配置映射到其他基本uri。 您只需将现有的“run”命令包装到映射块中即可

尝试在rails“config.ru”文件中执行此操作:

map '/mydepartment' do
    run Myapp::Application
end
现在,当您使用“rails服务器”时,应用程序应该位于localhost:3000/mydepartment
不确定这是否会给您带来期望的结果,但值得一试。

以下是如何将Rails 3.1应用程序部署到Apache中的子目录,替换不再存在的
config.action\u controller.relative\u url\u root

config/routes.rb
中:

scope 'my_subdir' do
  # all resources and routes go here
end
在Apache配置文件中:

Alias /my_subdir /var/www/my_subdir/public
<Location /my_subdir>
  SetEnv RAILS_RELATIVE_URL_ROOT "/my_subdir"
  PassengerAppRoot /var/www/my_subdir
</Location>
Alias/my_subdir/var/www/my_subdir/public
SetEnv RAILS\u RELATIVE\u URL\u ROOT“/my\u subdir”
PassengerAppRoot/var/www/my_subdir

它应该可以工作,包括自动将您的所有资产指向
/my_subdir

您用于开发的操作系统是什么?mac/linux/Windows我的开发操作系统是Windows。如何在生产中部署它?我会在本地尝试这样做。他们使用的是Passenger,它不在Windows上运行。我在尝试您的解决方案时看到这个错误…/actionpack-3.0.5/lib/action\u controller/deprecated/base.rb:11:in`relative\u url\u root=':参数数量错误(1代表0)(ArgumentError)ActionController::Base.relative\u url\u root在Rails 3.0及以上版本中不受支持。我不得不使用“map'/mydepartment/myapp'do”,即添加“/myapp”,但这确实奏效了。非常感谢你的帮助,巴洛!嗨@Barlow,我也有类似的情况,但我想知道是否有一种方法可以在运行时动态映射Rails应用程序?我为此提出了一个问题,并希望得到任何回复:请注意,这在Rails 4中不起作用。可以找到视图,但在使用资产url/路径帮助程序时,资产仍然映射到根目录。但是,服务器在根url上找不到资产。@Jason我应该为rails 4做什么=d这对我使用Rails 3.2.12而不修改routes.rb很有效