Как установить root_url
В моем приложении Ruby on Rails 3.1 у меня есть ссылка вроде этого:
<%= link_to 'Home', root_url %>
На мой dev. машина делает ссылку "localhost: 3000". При производстве он ссылается на IP-адрес, подобный этому: "83.112.12.27:8080". Я хотел бы заставить рельсы отображать адрес домена вместо IP-адреса. Как установить root_url?
Ответы
Ответ 1
В настройках маршрута:
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
, чтобы использовать это.
ОБНОВЛЕНИЕ
Немного больше о маршрутизации:
Релейная маршрутизация из внешнего устройства
Ответ 2
Вы ищете параметр 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"
}
Ответ 3
Возможно, вы могли бы сделать что-то подобное в своем 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
, это решение не будет перезаписываться или конфликтует с помощью указанного метода вспомогательного маршрута. Если вы заинтересованы, вы можете узнать больше об именованных методах маршрутизации.