15

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

http://someserver/mydepartment/myapp

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

http://localhost:3000/myapp

我想在我的开发环境中为这个部署路径建模。也就是说,我想使用如下所示的基本 URL 进行开发:

http://localhost:3000/mydepartment/myapp

这样,我可以使我的所有 URL 都与“/”相关,并且它们可以在两种环境中工作。

如何更改它,以便我的应用程序将在我的开发环境中以这条路径运行?

我找到的解决方案,但对我不起作用:

  • 设置scopeinroutes.rb似乎不适用于public.
  • 使用 Apache 的重写功能。我不想在我的开发盒上安装 Apache。理想情况下,该解决方案可以与 WEbrick 一起使用,尽管我似乎让 Mongrel 大部分都可以正常工作(Mongrel 和 Ruby 1.9.2 存在一些问题)。
  • relative_url_root不适用于 Rails 3 的设置和类似建议。
  • 动态生成 CSS/JavaScript 并调整路径以在开发和生产环境之间进行补偿。
4

3 回答 3

16

您可以尝试将您的 rails app rack 配置映射到不同的 base_uri。您需要做的就是将现有的“运行”命令包装在地图块中

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

map '/mydepartment' do
    run Myapp::Application
end

现在,当您“rails server”时,应用程序应该位于localhost:3000/mydepartment。不确定这是否会给你想要的结果,但值得一试。

于 2011-04-14T06:07:23.423 回答
6

以下是如何将 Rails 3.1 应用程序部署到 Apache 中的子目录,替换config.action_controller.relative_url_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>

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

于 2011-09-09T21:57:39.070 回答
-1

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

ActionController::Base.relative_url_root = "/mydepartment"
于 2011-04-09T05:37:35.603 回答