如何设置root_url

Rob*_*eiz 22 ruby-on-rails-3

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

<%= link_to 'Home', root_url %>
Run Code Online (Sandbox Code Playgroud)

在我的开发.机器它呈现与"localhost:3000"的链接.在生产时,它会呈现一个带有IP地址的链接,如"83.112.12.27:8080".我想强制rails渲染域地址而不是IP地址.我怎样才能设置root_url?

luc*_*tte 41

您正在寻找ActionController的默认URL选项.所以你可以这样做:

class ApplicationController < ActionController::Base
  def default_url_options
    if Rails.env.production?
      {:host => "www.example.com"}
    else  
      {}
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

这也适用于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"
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.它对我有用.但我更喜欢在`application.rb`中添加一个`config.action_controller.default_url_options = {:host =>"justinbiebiersucks.com"} (5认同)

Mr_*_*zle 12

在您的路线集中:

 root :to => 'welcome#index'
Run Code Online (Sandbox Code Playgroud)

并在您的链接集:

<%=link_to "Home", root_path %>
Run Code Online (Sandbox Code Playgroud)

它会呈现

<a href="/">Home</a>
Run Code Online (Sandbox Code Playgroud)

所以在你的localhost它会带你去

http://localhost:3000/

并在您的生产服务器它带你去

http://yourdomian.com/

并且默认情况下routes.rb将呈现index控制器的操作welcome.

PS.您还需要index.htmlpublic目录中删除才能使用它.


UPDATE

关于路由的更多信息:

从外部路由的路由