如何设置root_url

时间:2011-12-15 15:52:14

标签: ruby-on-rails-3

在我的Ruby on Rails 3.1应用程序中,我有一个这样的链接:

<%= link_to 'Home', root_url %>

On My dev。机器它呈现与“localhost:3000”的链接。在生产时,它会呈现一个带有IP地址的链接,如“83.112.12.27:8080”。我想强制rails渲染域地址而不是IP地址。我该如何设置root_url?

3 个答案:

答案 0 :(得分:40)

您正在寻找ActionController's default url option。所以你可以这样做:

class ApplicationController < ActionController::Base
  def default_url_options
    if Rails.env.production?
      {:host => "www.example.com"}
    else  
      {}
    end
  end
end

这也适用于ActionMailer。同样,两者都可以在您的环境中设置.rb或application.rb

# default host for mailer
config.action_mailer.default_url_options = {
  host: 'example.com', protocol: 'https://'
}

# default host for controllers
config.action_controller.default_url_options = {
  :host => "www.example.com"
}

答案 1 :(得分:12)

在你的路线集中:

 root :to => 'welcome#index'

并在您的链接集中:

<%=link_to "Home", root_path %>

它将呈现

<a href="/">Home</a>

所以在你的localhost它会带你去

http://localhost:3000/

并在您的生产服务器中将它带到

http://yourdomian.com/

默认情况下,routes.rb将呈现控制器index的{​​{1}}操作。

PS。您还需要从welcome目录中删除index.html才能使用此功能。


更新

关于路由的更多信息:

Rails Routing from the Outside In

答案 2 :(得分:1)

也许您可以在ApplicationController中执行类似的操作:

class ApplicationController < ActionController::Base
  helper_method :home_uri

  def home_uri
    Rails.env.production? ? 'http://www.yourdomain.com' : root_url
  end
  ...
end

然后将您的链接更改为:<%= link_to 'Home', home_uri %>

这会生成一个帮助方法home_uri,如果在开发环境中运行应用程序,它会返回您需要的URL。我认为你不能轻易覆盖root_url,我也认为这可能是一个坏主意。我的帮助方法以uri而不是url结束,因为rails使用路由器自动创建以url结尾的方法,因此如果您有一条名为home的路由,此解决方案不会覆盖或与该命名路由助手方法冲突。 You can read more about named route helper methods here if you're interested.