更改 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的主要内容,如果未能解决你的问题,请参考以下文章