更改Rails 3开发的基本URL

Mat*_*eau 13 ruby-on-rails url-routing webrick ruby-on-rails-3

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

http://someserver/mydepartment/myapp
Run Code Online (Sandbox Code Playgroud)

我的开发环境设置为使用默认的Rails配置,如下所示:

http://localhost:3000/myapp
Run Code Online (Sandbox Code Playgroud)

我想在我的开发环境中对此部署路径进行建模.也就是说,我想开发一个基本URL,如下所示:

http://localhost:3000/mydepartment/myapp
Run Code Online (Sandbox Code Playgroud)

这样,我可以将所有网址都设置为"/",并且它们可以在两种环境中工作.

如何更改它以便我的应用程序将在我的开发环境中生活在此路径中?

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

  • 设置scopein routes.rb似乎不适用于静态内容public.
  • 使用Apache的重写功能.我不想在我的开发盒上安装Apache.理想情况下,该解决方案可以与WEbrick一起使用,但我似乎也使Mongrel工作得很好(Mongrel和Ruby 1.9.2存在一些问题).
  • 设置relative_url_root和类似的建议不适用于Rails 3.
  • 动态生成CSS/JavaScript并调整路径以补偿开发和生产环境.

Dav*_*low 15

您可以尝试将rails app rack config映射到不同的base_uri.您需要做的就是将现有的'run'命令包装在map块中

尝试在你的rails'config.ru '文件中执行此操作:

map '/mydepartment' do
    run Myapp::Application
end
Run Code Online (Sandbox Code Playgroud)

现在,当你'运行服务器'时,应用程序应该在localhost:3000/mydepartment.不确定这是否会给你想要的结果,但值得一试.

  • 只是注意,这在Rails 4中不起作用.可以找到视图,但在使用资产URL /路径助手时,资产仍然会映射到根.但是,服务器无法在根URL找到资产. (3认同)

Las*_*unk 5

以下是如何将Rails 3.1应用程序部署到Apache中的子目录,替换config.action_controller.relative_url_root不再存在的子目录.

config/routes.rb:

scope 'my_subdir' do
  # all resources and routes go here
end
Run Code Online (Sandbox Code Playgroud)

在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>
Run Code Online (Sandbox Code Playgroud)

它应该工作,包括自动将所有资产指向/my_subdir.