Типичное решение этой проблемы - позволить прокси-серверу обрабатывать любое необходимое переписывание. Например, в Apache вы можете использовать rewrite_module и / или headers_module для исправления заголовков. В качестве другого примера, Nginx автоматически обрабатывает этот и другие подобные случаи после настройки вышестоящих серверов.
В ответ на комментарии:
Каковы значения конфигурации весенней загрузки remote_ip_header и protocol_header?
Давайте на минутку забудем Spring Boot. Tomcat, встроенный контейнер сервлетов, имеет клапан, известный как RemoteIpValve. Этот клапан является портом Apache remotip_module . Основной целью этого клапана является обработка «useragent, который инициировал запрос, как инициирующего useragent» для «целей авторизации и регистрации». Для использования этого клапана его необходимо настроить.
Более подробную информацию об этом клапане можно найти здесь здесь .
Spring Boot удобно настраивает этот клапан через application.properties через свойства server.tomcat.remote_ip_header и server.tomcat.protocol_header.
В верхней части файла test_helper.rb у меня есть код
ENV["RAILS_ENV"] = "test"
Если у вас нет этой строки, то системная проблема будет работать в среде по умолчанию (т. Е. При разработке).
Искать RAILS_ENV и его варианты по всему проекту. Посмотрите, установили ли вы его где-нибудь в своем приложении или в своих тестах.
Кроме того, на какой платформе вы работаете? Можете ли вы запустить тесты на другой машине и посмотреть, совпадают ли результаты?
Если это относительно недавняя разработка и вы используете RCS, например Git или SVN, вам следует просмотреть последние коммиты, и если вы Если вы специально используете Git, вам следует изучить git bisect. Если вы не используете RCS, вам следует его использовать.
Если это действительно новая проблема приложения, то, вероятно, проблема в вашей среде.
Какие плагины и гемы вы установили / настроили? Можем ли мы увидеть след?
На самом деле я не верю, что у вас здесь вообще проблема. Я полагаю, что в какой-то момент вы заметили, что ваша задача с граблями действительно попадает в среду разработки, и вы начали пытаться понять, почему это так. Затем вы добавили строку в конфигурационный файл разработки, чтобы вызвать исключение, и именно поэтому ваши тесты rake не работают.
Если вы удалите строку, которая вызывает исключение, вы можете обнаружить, что все тесты выполняются успешно.
] Если вы попробуете следующее, вы можете обнаружить, что это объясняет проблему.
Установите среду для разработки (только для целей трассировки)
export RAILS_ENV = development
Добавьте следующую строку в конец каждый файл в конфигурации / средах
помещает «**** В конфигурации среды # {ENV ['RAILS_ENV']} ****»
Добавьте следующую строку в test / test_helper.rb сразу под строкой, которая устанавливает среду для тестирования.
добавляет «**** Помощник по загрузке теста **** Environment = # {ENV ['RAILS_ENV' ]} "
Запустить rake с помощью опции трассировки, чтобы наблюдать за выполнением задач с отслеживанием текущей активной среды.
rake -t test
Запустите тесты снова, но на этот раз установите среду непосредственно перед запуском тестов, используя
export RAILS_ENV = test
Если у вас действительно есть проблема, тогда, возможно, вам следует опубликовать вывод rake -t с кодом трассировки в.
Это результат моих тестов в совершенно новом проекте с минимальным тестированием. Вы заметите, что перед запуском реальных тестов среда всегда является "тестовой"
** Invoke test (first_time)
** Execute test
** Invoke test:units (first_time)
** Invoke db:test:prepare (first_time)
** Invoke db:abort_if_pending_migrations (first_time)
** Invoke environment (first_time)
** Execute environment
**** In development environment config ****
** Execute db:abort_if_pending_migrations
** Execute db:test:prepare
** Invoke db:test:load (first_time)
** Invoke db:test:purge (first_time)
** Invoke environment
** Execute db:test:purge
** Execute db:test:load
** Invoke db:schema:load (first_time)
** Invoke environment
** Execute db:schema:load
** Execute test:units
**** Loading test helper **** Environment = test
**** In test environment config ****
Loaded suite /Library/Ruby/Gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader
Started
.
Finished in 0.071771 seconds.
1 tests, 1 assertions, 0 failures, 0 errors
** Invoke test:functionals (first_time)
** Invoke db:test:prepare
** Execute test:functionals
**** Loading test helper **** Environment = test
**** In test environment config ****
Loaded suite /Library/Ruby/Gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader
Started
.....
Finished in 0.133776 seconds.
5 tests, 6 assertions, 0 failures, 0 errors
** Invoke test:integration (first_time)
** Invoke db:test:prepare
** Execute test:integration
Самым вредным из того, что я видел, является то, что им не нужно понимать, что они делают (т. Е. Допустимо вставить какой-то код, который вы не понимаете, потому что он «кажется» работающим ).
Меня также действительно поражает количество людей, которые, кажется, не понимают разницы между И и ИЛИ.
Также приходится обрабатывать крайние случаи. Каждый раз, когда есть точка принятия решения, вы должны обрабатывать все возможные пути из этой точки, даже если они редко случаются.
И с точки зрения базы данных, только потому, что запрос выполняется, не означает, что результаты соответствуют желанию пользователя.
rb первый шаг пропускается, так что похоже, что проблема в этом. Может быть, вы делаете что-то в development.rb
, что имеет побочные эффекты для подпроцесса? Я почти всегда хочу заставить свои тесты запускать себя и их предварительные условия в «тестовой» среде, особенно когда ENV ['RAILS_ENV'] установлен на любое из общих значений по умолчанию (чтобы избежать катастрофических аварий), но я также хотите иметь возможность запускать тесты, скажем, в среде с именем "v_2_0_maint_test" или что-то в этом роде, вызывая rake test: units RAILS_ENV = v_2_0_maint_test
в командной строке.
Итак, у меня есть файл test_tasks.rake, который добавляет предварительное условие для каждой интересующей меня тестовой задачи. Поскольку это предварительное условие является предварительным, любые другие предварительные условия (например, db: test: prepare, db: fixtures: load ) работать в той же среде. Он утверждает, что может влиять только на те тесты, на которые вы хотите повлиять, и их предварительные требования.
namespace :test do |n|
[ n[:units], n[:functionals], n[:integration] ].each do |t|
t.prerequisites.unshift(:set_test_env_dammit)
end
task :set_test_env_dammit do |t|
if [ nil, "", "development", "staging", "production" ].index ENV['RAILS_ENV']
RAILS_ENV = "test"
end
end
end