Я думаю, что ваш код выглядит хорошо, но IIS не отправляет объект заголовка в одиночку с ожидаемым ответом. Убедитесь, что IIS настроен правильно.
Если CORS не работает для вашей конкретной проблемы, возможно, jsonp - еще один возможный способ.
На самом деле, вы, вероятно, захотите установить тип mime в mime_types.rb
и сделать это в response_to
], чтобы он не возвращал его как 'text / html'
:
Mime::Type.register "text/plain", :txt
Тогда ваши маршруты будут выглядеть так:
map.robots '/robots.txt', :controller => 'robots', :action => 'robots'
Для rails3:
match '/robots.txt' => 'robots#robots'
и контроллера примерно так ( поместите файл (ы) куда хотите):
class RobotsController < ApplicationController
def robots
subdomain = # get subdomain, escape
robots = File.read(RAILS_ROOT + "/config/robots.#{subdomain}.txt")
respond_to do |format|
format.txt { render :text => robots, :layout => false }
end
end
end
рискуя перестроить его, у меня может даже возникнуть соблазн кэшировать операцию чтения файла ...
О, да, вам почти наверняка придется удалите / переместите существующий файл 'public / robots.txt'
.
Проницательные читатели заметят, что вы можете легко заменить RAILS_ENV
на субдомен
...
С направляющие 6.0 это было значительно упрощено.
По умолчанию, если Вы используете: простая опция, текст представляется, не используя текущий макет. Если Вы хотите, чтобы направляющие поместили текст в текущий макет, необходимо добавить расположение: истинная опция и использование .text.erb расширение для файла расположения. Источник
class RobotsController < ApplicationController
def robots
subdomain = request.subdomain # Whatever logic you need
robots = File.read( "#{Rails.root}/config/robots.#{subdomain}.txt")
render plain: robots
end
end
В routes.rb
get '/robots.txt', to: 'robots#robots'
Если вы не можете настроить свой http-сервер для этого до того, как запрос будет отправлен на рельсы, я бы просто настроил контроллер «роботов», который отображает шаблон типа:
def show_robot
subdomain = # get subdomain, escape
render :text => open('robots.#{subdomain}.txt').read, :layout => false
end
В зависимости от того, что вы пытаетесь выполнить, вы также можете использовать один шаблон вместо кучи разных файлов.