?

Log in

No account? Create an account

Previous Entry

Редко простые задачки оборачиваются маленькими приключениями, но настройка отладчика RubyOnRails в NetBeans 6.8 как раз из их числа.
Итак, задача: на локальной машине отладить логику RoR приложения, соответствующую url-у www.a.line.ru/site_setup/forum.
Заходим в File → ProjectProperties(...) и видим там поле URL, а прямо под ним замечание в скобках (relative...). Не веря своим глазам, вписываем туда абсолютный адрес и проверяем, что он будет воспринят как относительный, например в нашем случае получится http://localhost:3005/www.a.line.ru/site_setup/forum. Разочаровавшись в NetBeans после пары попыток я пустился в хождения по форумам с целью понять, как избавиться от этого глупого ограничения. Оказалось, что проблему может решить только команда NetBeans, которая уже в курсе и все исправит в новой версии. Не сидеть же сложа руки тем, кому сейчас нужно работать и кого не устраивает один localhost?
Стал просматривать конфигурационные файлы NetBeans и тупо перебирать все пункты меню, чтобы найти хоть какую-то зацепку...И я кое-что нашел!
Во вкладке General пункта Tools → Options есть возможность выбора браузера... Вот если бы был браузер, умеющий подставлять вместо localhost произвольное имя - это бы решило проблему... и почему IE, FireFox и Chrome так делать не научили...
И тут в голове пронеслась мысль: "Ты же программист, возьми и научи". Сел и написал на C#:

using System;
using System.Diagnostics;
using System.Text.RegularExpressions;

namespace browser
{
  class Program
  {
    static void Main(string[] args)
    {
      if (args.Length != 2) return;

      var re = new Regex(@"^(.*?)localhost(.*?)\/([^\/]+)");

      var url = args[0];
      var browser = args[1];

      var m = re.Match(url);

      Func<int,string> f = i => m.Groups[i].Value;

      if (m.Success) url = f(1) + f(3) + f(2);

      Process.Start(
        new ProcessStartInfo(browser, url)
        {
          UseShellExecute = false,
          CreateNoWindow = true
        }
      );
    }
  }
}

Теперь дело за малым:
  • добавляем в Tools → Options новоиспеченный браузер с аргументами {URL} iexplore (к примеру)
  • в File → ProjectProperties(...) пишем site_setup/forum/www.a.line.ru

Comments

( 4 comments — Leave a comment )
kostteg
Jan. 16th, 2010 03:33 pm (UTC)
А настройки в файле C:\Windows\system32\drivers\etc\hosts тебя не устроили?

там же прописывается, во какой ip-адрес какое имя резолвить.
vitaly_kosenko
Jan. 16th, 2010 03:52 pm (UTC)
Конечно устроили. Но после того как ты вбил синоним "xyz" для "localhost", нужно убедить среду разработки при отладке заходить по новому адресу xyz/some/resource, а не localhost/some/resource - в этом проблема
kostteg
Jan. 16th, 2010 04:20 pm (UTC)
Хм.. Видать, я не понял.
Среда что-ли плюет на то, что localhost это на самом деле xyz - в ней прошито, что это 127.0.0.1?
vitaly_kosenko
Jan. 16th, 2010 04:25 pm (UTC)
Тогда еще разок схему: приложение - это сервис, который в зависимости от значения поля hostname загружает разную логику. Мне нужно было отладить логику в случае, когда hostname=www.a.line.ru, а среда считает, что hostname=localhost всегда и не дает этого поменять. Только относительный адрес можно настраивать. Вот
( 4 comments — Leave a comment )