更改 Rails 3 开发的基本 URL

Posted

技术标签:

【中文标题】更改 Rails 3 开发的基本 URL【英文标题】:Changing the base URL for Rails 3 development 【发布时间】:2011-07-30 08:33:18 【问题描述】:

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

http://someserver/mydepartment/myapp

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

http://localhost:3000/myapp

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

http://localhost:3000/mydepartment/myapp

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

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

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

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

【问题讨论】:

您使用什么操作系统进行开发? mac/linux/windows 我的开发操作系统是Windows。 它是如何在生产中部署的?我会尝试在本地进行。 他们使用Passenger,它不在Windows上运行。 【参考方案1】:

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

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

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

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

【讨论】:

我不得不使用“map '/mydepartment/myapp' do”,即添加“/myapp”,但这成功了。非常感谢您的帮助,巴洛! 嗨@Barlow,我有类似的情况,但我想知道是否有办法在运行时动态映射Rails 应用程序?我为此创建了一个问题,希望得到任何回复:***.com/questions/11060062/… 请注意,这在 Rails 4 中不起作用。可以找到视图,但在使用资产 url/path 帮助程序时,资产仍会映射到根目录。但是,服务器无法在根 url 找到资产。 @Jason 我应该为 Rails 4 做什么? =D【参考方案2】:

以下是如何将 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

【讨论】:

这适用于我使用 Rails 3.2.12 而不修改我的 routes.rb【参考方案3】:

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

ActionController::Base.relative_url_root = "/mydepartment"

【讨论】:

我在尝试您的解决方案时看到此错误.../actionpack-3.0.5/lib/action_controller/deprecated/base.rb:11:in `relative_url_root=': wrong number of参数(1 为 0)(ArgumentError) ActionController::Base.relative_url_root 不支持 Rails 3.0 及更高版本

以上是关于更改 Rails 3 开发的基本 URL的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 blazor wasm 应用程序的基本 URL

ubuntu 14.04下的rails开发环境

内推A轮易美健-SaaS产品经理+Ruby/Rails开发工程师

rails ajax URL更改

Ruby/Rails 中的夏令时开始和结束日期

Rails 3 的动态路由