Pull to refresh

Comments 41

Выглядит интересно, но меня лично вполне устраивает (да и возможностей больше) dnsmasq, nginx и небольшой скрипт для opensearch.
Я когда-то тоже жил на hosts+nginx, но в результате написал Yaxy ради удобного конфигурирования. А ещё в описанной ситуации с айфоном такой набор не поможет.

А каких возможностей больше?
Я сказал что dnsmasq + nginx + небольшой скрипт меня вполне устраивает.

— dnsmasq — любое количество доменов вида domain.tld/domain.dev/domain.whatever, ссылающихся на localhost. Одна строчка в конфигурации и про hosts можно забыть.
— nginx — один конфиг для любого количества виртуалхостов для доменов из предыдущего пункта с поддержкой php (для всего остального localhost:port / зона dev). Достаточно просто создать каталог (или развернуть шаблон проекта из vcs и начать экспериментировать)
— скрипт обеспечивает api для angularjs морды и opensearch. Удобная навигация по любому количеству доменов из предыдущих пунктов (первый эшелон — opensearch. второй — морда на angularjs в духе dmenu). Очень удобно.
— есть шаблоны которые просто нужно адаптировать под задачу.
— используются знакомые, предсказуемые инструменты.

> А ещё в описанной ситуации с айфоном такой набор не поможет.
Вы проверяете свои сайты в iPhone/iPad? Хорошо, если есть девелоперский сервер, а если нет — приходится олаживаться в продакшне. С Yaxy мы указываем в настройках прокси-сервер на нашем локальном компьютере и смотрим с телефона все локальные сайты.

Если честно я не вижу тут проблемы. Может быть я просто не так понял суть задачи.
Если не секрет, расскажите, пожалуйста, подробнее про скрипт для поиска по локальным доменам через opensearch.
Не секрет. Я хотел его выложить в статье про настройку рабочего окружения (нормальные инструкции для ubuntu актуальных версий, а не поток сознания из предыдущего моего комментария) и настройку пакетных менеджеров (pip, npm, bower, composer, etc). Но как то не сложилось со статьёй: то времени нет, то кажется что слишком все очевидное и нет смысла писать об этом ещё раз.

Вообще, всё просто:
В /etc/dnsmasq.conf
address=/template/127.0.0.1

В nginx два сервера: один для скрипта (http://template/), другой для доменов (вида whatever.template/)
Каталог (например ~/Workspace/templates) выделяется под доменную зону. Каждая папка доступна по адресу foldername.template. Папки нет — редирект на template.
Поскольку папок много, а я ленивый и не хочу запоминать что как называется, появился скрипт. Он добавляется в список opensearch и позволяет искать через omnibox (в chrome/chromium) или через соответствующие поля в прочих браузерах. По мере ввода предоставляются подходящие домены. Либо выбирается домен из подсказки, либо нажимается enter. Домен есть — переходим на domain.template, нет — переходим на страницу со скриптом и там ищём.
web часть скрипта на angular. Она представляет из себя простой input и список, фильтрующийся по мере ввода названия (как в dmenu из linux). Данные берутся из opensearch. Есть навигация клавишами: вверх, вниз, ввод.
Данные формируется из списка папок в наблюдаемом каталоге.
Достаточно добавить папку (например, через git clone <шаблон проекта> foldername) в каталог (~/Workspace/templates) и она сразу будет доступна по адресу foldername.template. А скрипт просто упрощает доступ к этому сайту. Репозитария у него нет, сам он страшненький. Зато работает безотказно.
Классная вещь — делайте репозиторий — не важно что страшненький, его допилят :)
Я использую только конфиг nginx без основного сайта — но даже оно очень удобно — как-то поиск был без надобности — проектов не больше десятка
Спасибо.
Несмотря на все плюшки поймал себя на мысли: «Еще одно место, где надо будет проверять почему сайт не грузится..»
В целом, конечно, так. Но я сижу в интернете через Yaxy больше года, за всё время была только одна ситуация, когда что-то не грузилось (она уже исправлена, разумеется).
Я, наверное, не так выразился.
Не бывало такого, что 100% рабочий код не работает или работает не так? А в результате оказывается, в из хостов забыли заглушку убрать.
Теперь такую ситуацию нужно проверять не только с hosts, но и с Yaxy =)
А, вы про это. Тут ничего не изменится. Проверяли файл hosts, а будете проверять конфиг Yaxy. Hosts при наличии Yaxy не нужен.
Реально удобная штука, пользуюсь ею уже довольно давно. Коль, а почему только сейчас статью написал?
Тут два обстоятельства:
1. Обкатывал на себе.
2. Заставлял себя написать статью.
orloffv$ yaxy
env: node\r: No such file or directory

orloffv$ yaxy --config /Users/orloffv/Dropbox/sync/yaxy/config.txt --port 9999
env: node\r: No such file or directory

как запустить это чудо-то?
п.с. по описанию очень круто.
Кажется, что npm как-то криво поставил пакет. У вас node в стандартном месте лежит?

Попробуйте поставить локально в какую-нибудь папку npm install yaxy (без -g) и запустить явно node yaxy (только в папку node_modules надо войти).
Кажется понял в чём беда, лишние \r в запускаемом скрипте. Обновите пакет, должно заработать.
Обновите пакет, должно заработать.
все хорошо.
с https не работает?
С https пока не заморачивался. Но ходить на https умеет. Т.е. по задумке, если надо что-то подменить на сайте с https, можно создать правило

site.ru/main.js => file:///home/me/main.js
site.ru => https://site.ru

А вот перехватить запрос к https с Yaxy не получится, по крайней мере пока.
понял, как раз хотел перехватить, весь продакшн с https)
Советую вам перевести документацию на английский или сделать 2 версии. В целом NodeJS сейчас в моде — ваш проект может развиться в нечто большее.
Тут если только кто-нибудь за пулреквестит. Я, к сожалению, могу только читать английский. Школьный немецкий меня гнетёт.
Ой.
Поправил, спасибо.
Интересный проект ). Недавно нуждался в чём-то подобном для отладки JS.
А имеется ли возможность добавить правила вида:
*.site.my => localhost:9898
Т.е. перенаправлять все поддомены на какой-нибудь другой хост: порт?
/^http://[^.]+\.site\.my/ => localhost:9898

В левой части правила может быть регулярка.
Будете клонировать — не забудьте про TOR! ;)
Возможно кому-нибудь пригодится.
Стандартно chrome и chromium не позволяют задавать прокси в настройках браузера. (Предлагается выставить системные настройки прокси)
Но есть опция командной строки через которую в chromium можно задавать прокси:

chromium-browser --proxy-server=localhost:8008


Также есть возможность запустить хромиум в чистом новом профайле

chromium-browser --temp-profile
Весьма занимательную вещь вы разработали, и на первый взгляд выглядит очень, как это сказать, цельно. Решаемые проблемы вполне конкретны.
Штука понравилась, попробую как-нибудь использовать. Сам я сталкивался с двумя следующими вопросами:
1. Разрабатывается сайт с очень сильной клиентской стороной. Фактически, от веб-сервера требовалось только отдавать статические файлы. Для девелопмента использовался однострочный сервер на Python:
$ python -m http.server 8000
Однако, он нехорошо работал вкупе с опцией $.ajax, которая отменяет кеши. А именно, перестаёт находить файлы как только к GET-запросам передаются аргументы (?timestamp=X). Собсно, решил я это переходом на cherokee в деве. Возможно, для этого можно будет применить Yaxy.
2. искал user-level замену файлу /etc/hosts, хотелось что-то типа ~/.hosts. Я так понимаю, Yaxy может быть использован именно для этого, если прописать его в автозагрузку и указать конфиг в user directory.
1.
my-site.dev => file:///home/me/my-site

Параметры после ? будут игнорироваться.

2. Да, но в отличие от /etc/hosts в браузере нужно явно указывать прокси-сервер.
Сегодня пытался заплатить за калужский Домолинк на сайте Ростелекома. Ввёл реквизиты карты, жму на кнопку — ноль реакции. Смотрю JS-консоль в хроме — ошибка: AJAX не смог загрузить какой-то GIF и из-а этого «упал». Думаю, Yaxi тут бы помог «подхакнуть» картинку «на лету»…

P.S. Заплатил через онлайн-банк Альфабанка.
В следующих версия планируется скриптуемость или какая-то другая программируемая или просто более сложная логика?
Yaxy можно использовать как модуль. В пакете отдельно лежат модуль и консольная утилита, использующая этот модуль. Модуль не задокументирован, поэтому я не писал про него.

Возможности модуля гораздо больше. Например, можно матчиться не только на урл, а на наличие какого-то http-заголовка.

При желании иметь скриптуемую проксю, проще просто js-скрипт написать. Будет что-то вроде
var server = require('yaxy')(8558);
server.bind({
    refererStart: 'http://www.yandex.ru/',  // Перехватить запрос с реферером от Яндекса
    fn: function(state) {
        console.log(state.getRequestUrl());
        state.doRequest();
    }
});


Или можно взять node-webkit и сделать gui интерфейс.
Получается, это что-то вроде HandyCache прокси-сервера, только LUA отсутствует.
Only those users with full accounts are able to leave comments. Log in, please.