|
|
|
aktuba |
|
|||
Смышленный Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: нет Всего: 38 |
Доброго времени суток. Изучаю ruby и уперся в какую-то не понятную, для меня, проблему. Не могу разобрать yaml-файл. Содержимое такое:
Подскажите, люди добрые, как из этого получить массив? yaml.to_a не работает, говорит "undefined method `bytesize' for #<Array:0x000000058cbdd8> file: utils.rb location: bytesize line: 281" (( -------------------- |
|||
|
||||
source777 |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 6 Всего: 56 |
Массив какого вида? Так то приведённые данные из yaml конвертируются явно в хэш, а не в массив.
-------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
aktuba |
|
|||
Смышленный Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: нет Всего: 38 |
Вот такого вида получаю данные. Задача - перебрать конфиг и найти подходящий роут и это не получается ( -------------------- |
|||
|
||||
source777 |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 6 Всего: 56 |
Такого вида получатся после hash.to_a, хотя с хэшем привычнее...
Непонятно, что из себя представляет "перебрать конфиг и найти подходящий роут". Какие варианты входных данных? -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
aktuba |
|
||||
Смышленный Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: нет Всего: 38 |
В том-то и проблема, что to_a нету. Вот код:
Входные параметры в первом посте (.yml файл). Что хочется: взять возможные роуты из yml-файла, перебором найти подходящий под текущий запрос и вызвать нужный контроллер и action. -------------------- |
||||
|
|||||
source777 |
|
||||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 6 Всего: 56 |
Не, я имел в виду входные параметры для поиск по роутам. Ну а как тогда? Может это конечно как-то от версий зависит, но скопировав в файл данные из первого поста у меня получается только так:
Впрочем, для перебора то какая разница, что хэш, что массив массивов.. всё едино:
-------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
||||
|
|||||
aktuba |
|
||||
Смышленный Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: нет Всего: 38 |
Пока никаких. По сути - request.path_info Код выше, ничего другого нет. Версии ruby и yaml такие же, как у тебя. Возможно дело в sinatra.
Так говорю-же, to_a не работает ("undefined method `bytesize' for #<Array:0x000000058cbdd8> file: utils.rb location: bytesize line: 281"), а перебор по Symbol не подходит, так как планируется нечто подобное:
Т.е., заранее не известны параметры роута. -------------------- |
||||
|
|||||
aktuba |
|
|||
Смышленный Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: нет Всего: 38 |
routes.inspect выдает тоже самое, как у тебя. Я до этого смотрел через p routes ( -------------------- |
|||
|
||||
aktuba |
|
||||
Смышленный Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: нет Всего: 38 |
Видимо я чего-то не понимаю в ruby или yaml... Переписал код в такой вид:
Вот yaml-файл:
На выходе ожидаю получить action в каждом роуте (т.е., '(login|logout|register|restore)index' ). Но, почему-то, на выходе получаю названия роутов, т.е. 'userdefault'. Что не так делаю? o_O -------------------- |
||||
|
|||||
source777 |
|
||||||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 6 Всего: 56 |
Это ты не из puts получаешь, это блок each возвращает перебираемый массив, это т.н. fluent interface. А puts очевидно выводит тебе две пустых строки, т.к. ключа 'action' не существует. Вот :action есть, ты ж сам во входном файле символы используешь вместо строк:
Ну и в целом такой способ перебора кривоват, правильнее так:
У sinatra есть своя система роутинга, зачем писать велосипед? -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
||||||
|
|||||||
aktuba |
|
||||
Смышленный Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: нет Всего: 38 |
Не, это я экспериментировал с routes.yml. В любом случае, проблема не в этом, см. дальше. Выдает "userdefault" Выдает:
Последний вариант сейчас виден на getnotify.ru. Дополнительно приложил все файлы, может в них что не так ( Потому что в синатре пипец какой не удобный роутинг (((. Для меня. Язык на полном ооп, а роуты на def (то бишь, фактически на функциях). P.S.: а еще мне в php, в kohana, нравятся роуты за такие конструкции:
Один-два роута и хватает на все приложение. В синатре так невозможно (( Это сообщение отредактировал(а) aktuba - 6.6.2012, 22:41 Присоединённый файл ( Кол-во скачиваний: 2 ) ruby.rar 3,37 Kb -------------------- |
||||
|
|||||
source777 |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 6 Всего: 56 |
Так ты результат в браузере что-ли смотришь!? puts ведь туда в принципе ничего не выводит, puts выводит только в консоль!
Браузер показывает тебе то, что возвращает метод execute. Замени перебор хэша на это:
И будет тебе и в браузере видно. -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
source777 |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 6 Всего: 56 |
Насчёт невозможно - это ты конечно загнул. По сути это самый примитивный MVC-роутинг. Другой вопрос, что для MVC логичнее Rails использовать.. Область применения Sinatra в основном там, где MVC крайне нежелателен. Если уж очень хочется именно на Sinatra, то начни хотя бы с Padrino. Это сообщение отредактировал(а) source777 - 7.6.2012, 00:11 -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
aktuba |
|
||||
Смышленный Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: нет Всего: 38 |
Блин, не знал про это. Thx. Помогло! Спс огромное, завтра буду дальше разбираться. Вернул веру в руби ))) Ну может совсем немного... Но в целом сказал как есть ;) Не поверишь - не хочу. Почитал про rails, посмотрел примеры, бенчмарки. Не хочу юзать рельсы )
Я когда-то кохану выбрал именно по той причине, что дает только основу и огромные возможности. С синатрой так же, по сути. А вот padrino не получилось заюзать. Уже не помню почему, но не работало у меня (( Да и наворочено лишнего. Например, я очень не люблю кодогенераторы. До сих пор не понимаю смысла миграций. В padrino отсутствует поддержка mysql2, насколько я помню, а orm/active record я обхожу стороной (правда, это из-за php, но не думаю что в руби с этим лучше будет). Ну и роуты в padrino тоже не блещут удобством )) P.S.: мечта - найти ko3 на руби. Пока не нашел ((( -------------------- |
||||
|
|||||
source777 |
|
||||||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 6 Всего: 56 |
Да нет в роутинге Sinatra никаких ограничений, делай любой роут какой захочешь:
Для реального использования, конечно, надо получше продумать регулярку в части controller и action, но в качестве proof-of-concept и так сойдёт.
Да не всё так страшно, в рельсах только запуск приложения подтормаживает. В остальном всё ok. А бенчмарки - они как всегда забывают, что реальные приложения упираются прежде всего в кривые алгоритмы, медленные выборки из БД и т.п., по сути влияние фреймворка стоит во втором десятке факторов, влияющих на производительность. Кроме того бенчмарки никогда не сравнивают оптимальные для конкретной задачи решения. Т.е. для вывода "Hello world!" они непременно заюзают весь Rails-стек, вместо
Kohana - это ведь один из клонов Rails под PHP Если мечта добавлять нужное на основу, то есть rails-api Это как? Гем не подключен по умолчанию? Кто-то заставляет тебя их использовать? Хотя на стадии обучения кодогенераторы - вещь очень полезная, чтобы вникнуть в style guide конкретного фреймворка. Очень зря. Обходить best practices стороной из-за того что под PHP кривая реализация попалась весьма странно, под PHP нормальные реализации вообще редкость... Помню ActiveRecord в Code Igniter, так там от этого паттерна ничего кроме названия нет. -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
||||||
|
|||||||
Правила форума "Ruby: Общие вопросы" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Ruby: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |