Есть какой-нибудь способ настроить Rails, чтобы он использовал другое общедоступное местоположение для разных доменов?

#ruby-on-rails #static #dns #public

#ruby-on-rails #статический #dns #общедоступный

Вопрос:

У меня следующая структура папок:

 /rails
  /public
    /images
  

И у меня есть 2 домена:
long_domain.com
short.one

Я хочу, чтобы, когда long_domain.com при загрузке он использует папку /public в качестве общедоступной, а при загрузке short.one он использует /public/images

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

Можно ли это сделать с помощью Rails? Было бы лучше использовать другой «статический» и легкий сервер?

Ответ №1:

Есть несколько способов, которыми вы могли бы это сделать.

Если ваши изображения размещены за пределами сайта, вам придется использовать полные URL-адреса в тегах изображений. Относительные ссылки будут вести на ваш CDN или сайт, на котором находятся ваши изображения. Преимущество здесь в том, что у вас есть явный контроль над вашим приложением, и оно, вероятно, будет работать. Я бы определил некоторую константу в своей конфигурации для местоположения размещения изображений, чтобы я мог легко изменить ее позже.

Помимо этого, вы можете использовать mod_passenger для прокси-сервера обратно в Rails и использовать правило mod_rewrite для перезаписи ваших тегов изображений на лету. Преимущество здесь в том, что вам не придется менять свое приложение (хотя изменения, вероятно, не так уж плохи). Проблема в том, что mod_rewrite — это регулярное выражение, поэтому может потребоваться некоторое время, чтобы определить правильное правило (и протестировать все странные случаи).

Третий вариант — использовать драгоценный камень. Если вы действительно пытаетесь масштабировать обработку изображений, вам следует просто переключиться на Dragonfly, которая может хранить вторичную копию изображения в любом месте, где вы хотите. У него много опций и функций. Похоже, вас заинтересует этот аспект: http://markevans.github.com/dragonfly/file .DataStorage.html

Надеюсь, это даст вам несколько идей.

Комментарии:

1. Я думаю, что я собираюсь использовать RewriteRule в Apache / Passenger, я этого не хотел, потому что на моем компьютере для разработки я просто запускаю Rails в одиночку: P. Но мне придется использовать Passenger в производстве, так что лучше привыкнуть к этому ^^