Как установить root_url - PullRequest
       2

Как установить root_url

21 голосов
/ 15 декабря 2011

В моем приложении Ruby on Rails 3.1 у меня есть такая ссылка:

<%= link_to 'Home', root_url %>

На моем устройствемашина выводит ссылку с "localhost: 3000".На производстве он создает ссылку с IP-адресом, например, «83.112.12.27:8080».Я хотел бы заставить рельсы отображать адрес домена вместо IP-адреса.Как мне установить root_url?

Ответы [ 3 ]

41 голосов
/ 15 декабря 2011

Вы ищете URL-адрес ActionController по умолчанию .Таким образом, вы можете сделать что-то вроде:

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"
}
12 голосов
/ 15 декабря 2011

В ваших маршрутах установлено:

 root :to => 'welcome#index'

и в ваших ссылках установите:

<%=link_to "Home", root_path %>

Будет отображаться

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

Итак, в вашем местном хосте. Это приведет вас к

.

http://localhost:3000/

и на вашем производственном сервере вам потребуется

http://yourdomian.com/

и routes.rb отобразит действие index контроллера welcome по умолчанию.

PS. Вам также необходимо удалить index.html из каталога public, чтобы использовать это.


UPDATE

Еще немного о маршрутизации:

Направляющие с внешней стороны

1 голос
/ 15 декабря 2011

Возможно, вы могли бы просто сделать что-то подобное в вашем 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, это решение не будет перезаписывать или конфликтовать с этим именованным методом вспомогательного маршрута. Вы можете узнать больше о методах именованных маршрутов здесь, если вам интересно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...