Я успешно добавил возможность использования динамических поддоменов в моем приложении.Проблема в том, что когда я запускаю свои тесты Cucumber, я получаю следующую ошибку, когда мое приложение выполняет redirect_to, который содержит поддомен:
features/step_definitions/web_steps.rb:27
the scheme http does not accept registry part: test_url.example.com (or bad hostname?)
У меня есть действие контроллера регистрации, которое создает пользователя и выбранную учетную записьи перенаправляет пользователя к методу выхода из системы с указанием субдомена на основе того, что пользователь выбрал в качестве субдомена в форме регистрации.Вот код для действия перенаправления, которое происходит после создания и сохранения моделей пользователей и учетных записей:
redirect_to :controller => "sessions", :action => "destroy", :subdomain => @account.site_address
Вот мои рельсы 3 маршрута:
constraints(Subdomain) do
resources :sessions
match 'login', :to => 'sessions#new', :as => :login
match 'logout', :to => 'sessions#destroy', :as => :logout
match '/' => 'accounts#show'
end
Вот кодЯ до сих пор для класса Subdomain, который указан в ограничении выше:
class Subdomain
def self.matches?(request)
request.subdomain.present? && request.subdomain != "www"
end
end
Я добавил UrlHelper к ApplicationController:
class ApplicationController < ActionController::Base
include UrlHelper
protect_from_forgery
end
Это код для вышеупомянутого класса UrlHelper:
module UrlHelper
def with_subdomain(subdomain)
subdomain = (subdomain || "")
subdomain += "." unless subdomain.empty?
[subdomain, request.domain, request.port_string].join
end
def url_for(options = nil)
if options.kind_of?(Hash) && options.has_key?(:subdomain)
options[:host] = with_subdomain(options.delete(:subdomain))
end
super
end
end
Весь этот код выше позволяет мне нормально работать с поддоменами в локальном браузере.Проблема выше возникает, когда я запускаю тест на огурец.Тест нажимает кнопку регистрации, которая, в свою очередь, вызывает redirect_to и выдает исключение, перечисленное выше.
Вот как выглядит мой gem-файл:
require 'subdomain'
SomeApp::Application.routes.draw do
resources :accounts, :only => [:new, :create]
match 'signup', :to => 'accounts#new'
constraints(Subdomain) do
resources :sessions
match 'login', :to => 'sessions#new', :as => :login
match 'logout', :to => 'sessions#destroy', :as => :logout
match '/' => 'accounts#show'
end
end
Не могли бы вы сообщить об этом?дополнительный метод, чтобы мои тесты работали сейчас?Меня может заинтересовать исправление или способ проверки моих методов без использования поддоменов (например, метод с вычеркнутым именем, который извлекает имя учетной записи).