В рамках проекта Saint (http://saintrb.org/) подготовлен инструментарий, который позволяет быстро и просто генерировать web-интерфейсы для управления данными в произвольных таблицах БД, путем создания каркаса на языке Ruby. Saint позволяет создавать любые HTML-поля на чистом Ruby, поддерживает любые типы ассоциирования таблиц, комплексные фильтры, встроенный файловый менеджер и другие полезные функции. Основная цель Saint - максимально упростить управление контентом определённых таблиц БД. Код (https://github.com/slivu/saint/) проекта распространяется под лицензией BSD. Пример интерфейса, созданного на основании простого 100-строчного скрипта (http://saintrb.org/demo), можно оценить на данной странице (http://saintrb.org/demo/page).
Ниже приведён пример развёртывания административного интерфейса "в два клика". Для этого понадобиться Ruby 1.9.2 (или выше) и доступ к любому SQL-серверу, поддерживаемому в DataMapper (http://datamapper.org) (MySQL, SQLite, PostgreSQL и т.д.).
Для...URL: http://saintrb.org/
Новость: http://www.opennet.me/opennews/art.shtml?num=32841
По описанию похоже на переизобретение недоPHPMyAdmin на руби.
не совсем ...
Данный инструментарий упрощает жизнь веб-разработчикам, позволяя быстро и эффективно создавать админ интерфейсы.
Аналог ActiveAdmin, но свободен от рельсов.
> Данный инструментарий упрощает жизнь веб-разработчикам, позволяя быстро и эффективно
> создавать админ интерфейсы.
> Аналог ActiveAdmin, но свободен от рельсов.А как с его помощью можно создать не проект с нуля, а именно админ-интерфейс к одной из таблиц в существующей бд sqlite?
Хоть с рельсами, хоть без :)
>> Данный инструментарий упрощает жизнь веб-разработчикам, позволяя быстро и эффективно
>> создавать админ интерфейсы.
>> Аналог ActiveAdmin, но свободен от рельсов.
> А как с его помощью можно создать не проект с нуля, а
> именно админ-интерфейс к одной из таблиц в существующей бд sqlite?
> Хоть с рельсами, хоть без :)Очень просто.
Устонавливаем Saint:
$ gem install saint
Создаём DataMapper модель:
class PageModel
include DataMapper::Resource
property :id, Serial
property :name, String
endСоздаём админ интерфейс.
class Page
include Saint::Api
http.map :pages
saint.model PageModel
saint.column :name
endЗапускаем админ интерфейс.
app = Presto::App.new
app.mount Page
app.runСтавим модель, интерфейс и инициализатор приложения в файл app.rb и запускаем:
$ ruby app.rb
А где здесь указывается какую таблицу из моей бд мы админим?
> А где здесь указывается какую таблицу из моей бд мы админим?Saint не работает на прямую с БД, а обращается к таблицам через ORM.
Связка с таблицой здесь:
class PageModel
include DataMapper::Resource
property :id, Serial
property :name, String
endЭто не phpMyAdmin.
Это утилита для веб-сайтов.
[[http://saintrb.org/demo/ Здесь админ интерфейс]] для написания которого потребовалось всего 94 строк чистого Ruby
> Saint не работает на прямую с БД, а обращается к таблицам через
> ORM.
> Связка с таблицой здесь:
> class PageModel
> include DataMapper::Resource
> property :id, Serial
> property :name, String
> end
> Это не phpMyAdmin.
> Это утилита для веб-сайтов.позволяющая "быстро и просто генерировать web-интерфейсы для управления данными в произвольных таблицах БД" - вот именно это я и пытаюсь понять.
Есть у меня таблица в моей sqlite БД. Как теперь мне "быстро и просто" сделать к ней веб-интерфейс для управления данными?
Есть пример где берётся таблица такая-то, с вот такими-то полями и затем к ней генерируется этот самый интерфейс для управления?
Хоть на чистом руби, хоть на грязном :)Беглый просмотр документации такого к сожалению не выявил.
>[оверквотинг удален]
>> Это не phpMyAdmin.
>> Это утилита для веб-сайтов.
> позволяющая "быстро и просто генерировать web-интерфейсы для управления данными в произвольных
> таблицах БД" - вот именно это я и пытаюсь понять.
> Есть у меня таблица в моей sqlite БД. Как теперь мне "быстро
> и просто" сделать к ней веб-интерфейс для управления данными?
> Есть пример где берётся таблица такая-то, с вот такими-то полями и затем
> к ней генерируется этот самый интерфейс для управления?
> Хоть на чистом руби, хоть на грязном :)
> Беглый просмотр документации такого к сожалению не выявил.как обычно делается для веб-сайтов, вам нужно сначала создать DataMapper модель.
есть опыт работы с DataMapper ORM?вот самый простой пример модели, с двумя полями - id и name
class PageModel
include DataMapper::Resource
property :id, Serial
property :name, String
endу вас уже есть модель для вашей SQLite таблицы?
если нет, создайте.теперь осталось лишь создать Saint класс который создаст админ интерфейс "на лету":
class Page
include Saint::Api
http.map :pages
saint.model PageModel
saint.column :name
endи в конце файла, инициализируем и запускаем приложение:
app = Presto::App.new
app.mount Page
app.run
потом из терминала:ruby имя-файла.rb
и в броузере:
Понятно.То есть в описании следовало указать "быстро и просто генерировать web-интерфейсы для управления данными в DataMapper ORM" - до "произвольных таблиц БД" ещё нужно пилить и пилить.
А есть где-нибудь вводное руководство, подробно рассказывающее про DataMapper и Saint?
> То есть в описании следовало указать "быстро и просто генерировать web-интерфейсы
> для управления данными в DataMapper ORM" - до "произвольных таблиц БД"
> ещё нужно пилить и пилить.А что можно сократить в вышеизложенном коде? Разве что сделать автоматическую генрацию модели по таблице...
> А что можно сократить в вышеизложенном коде? Разве что сделать автоматическую генрацию
> модели по таблице...Именно это я и понимаю под "бытро и просто". Есть нечто, что подобное умеет?
А то фактическое дублирование полного описания структуры БД выглядит лишним кодом, не дающим никаких преимуществ по сравнению с прямым вызовом sql select..
>> А что можно сократить в вышеизложенном коде? Разве что сделать автоматическую генрацию
>> модели по таблице...
> Именно это я и понимаю под "бытро и просто". Есть нечто, что
> подобное умеет?
> А то фактическое дублирование полного описания структуры БД выглядит лишним кодом, не
> дающим никаких преимуществ по сравнению с прямым вызовом sql select..Согласен, согласен...
вы действительно ставите под сомнение целесообразность ORM и предпочитаете работать через селект?уважаемые, опомнитесь пожалуйста :)
> вы действительно ставите под сомнение целесообразность ORM и предпочитаете работать через селект?Именно так - работая напрямую с селектом я уменьшаю объём кода - нет нужды дублировать описание структуры бд.
ОРМ подходит если бд используется ТОЛЬКО как бэкэнд вебморды т. е. если веб-морда первична - данные создаются и изменяются в веб-морде, при необходимости через ОРМ обновляется структура бд.
А вот если веб-морда всего-лишь интерфейс, и данные создаётся в другом приложении, равно как им же и определяется структура бд, то ОРМ просто лишняя бессмысленная абстракция, к тому же раздувающая код. То есть если данные первичны, то ОРМ хуже чем использование простого селекта.
Во всяком случае вдумчивое чтение документации не выявило ни одного опровергающего данный подход примера.
> Согласен, согласен...Жаль что с автоматизацией не вышло.
Ну раз уж всё-равно придётся писать селекты и роуты вручную, то лучше воспользуюсь привычным yesod с мордой на jquery - всё таки нужны более веские аргументы чтобы смириться с синтаксисом и динамической типизацией руби :)
>> Согласен, согласен...
> Жаль что с автоматизацией не вышло.
> Ну раз уж всё-равно придётся писать селекты и роуты вручную, то
> лучше воспользуюсь привычным yesod с мордой на jquery - всё таки
> нужны более веские аргументы чтобы смириться с синтаксисом и динамической типизацией
> руби :)Поверьте, руби того стоит :)
> Понятно.
> То есть в описании следовало указать "быстро и просто генерировать web-интерфейсы
> для управления данными в DataMapper ORM" - до "произвольных таблиц БД"
> ещё нужно пилить и пилить.
> А есть где-нибудь вводное руководство, подробно рассказывающее про DataMapper и Saint?обязательно свяжусь с модами с просьбой под-корректировать топик.
http://datamapper.org/docs/ инфа по DataMapper
http://saintrb.org/GettingStarted.md вводный туториал по Saint
> http://datamapper.org/docs/ инфа по DataMapperТо ли я не так чего понял, то ли DM это сплошной boilerplate - указываю какую использовать бд, а затем ручками в поле класс фактически заново описываю её структуру в виде "поле такое-то", "тип такой-то". Нафик спрашивается, если эта информация уже лежит в бд?
Чем это лучше использования sql напрямую через select "поле такое-то"?
тогда, для начала вам надо вникнуть в суть ORM.http://martinfowler.com/eaaCatalog/dataMapper.html
> тогда, для начала вам надо вникнуть в суть ORM.
> http://martinfowler.com/eaaCatalog/dataMapper.htmlВник. Получилось что ОРМ мне не нужен ибо переделывать ОРМ-модель (к тому же бессмысленно дублирующую описание структуры бд) ничуть не легче, чем переписать несколько селектов при изменении структуры бд.
ну и что это, млять, не тоже самое что делается в в других аналогчных фреймворках? В общем эта, а кто тут раздаёт права плоунам новости постить?
> ну и что это, млять, не тоже самое что делается в в
> других аналогчных фреймворках? В общем эта, а кто тут раздаёт права
> плоунам новости постить?И что? Когда город новый образуется - тоже клоунство?
Если пришел клоун и сказал "теперь считаем что есть город" город от этого не появляется, а клоун менее клоуном не становится.
> Если пришел клоун и сказал "теперь считаем что есть город" город от
> этого не появляется, а клоун менее клоуном не становится.Тут, однако, городочек явно появился :-)
слушай, чего сейчас только не позволяет это делать. В общем, ещё один велосипед на большой свалке.
> слушай, чего сейчас только не позволяет это делать. В общем, ещё один
> велосипед на большой свалке.Согласен, алтернатив много.
Но ведь веб-разработчик не скаже клиенту - вот тебе phpMyAdmin(или ApEx) редактируй себе на здоровье :)А создаст админ по адресу www.customers-mega-site/admin/ с паролем и приятным интерфейсом, правильно?
Вот Saint это и позволяет делать быстро и эффективно.
> Согласен, алтернатив много.Можно ссылки на самые удобные из них?
А то с $subj пока не сростается, вдруг с альтернативами больше повезёт.
И чо? Ну ну правда - есть ли хоть один из живых веб-фреймворков который этого не умеет? Django, WebPy - так уж точно за другие пусть говорят кто их щупал.
PS: Рубисты как обычно изобрели велик и радостно всем об этом поведали :)
Рубисты не изобретают велик, они изобретают то, чего изобрести (читай: реализовать) еще не успели. И делают это явно умнее пыхпыхников.
Ну не знаю. Судя по примерам и тексту новости это тупой доступ к базе, для которого еще и "код" зачем то писать надо. PHPMyAdmin дает тоже самое, только с большими возможностями и без ручного написания "кода". Ну и не могу не отметить, что в перловых ORM такой "код" пишется автоматически.
> Ну не знаю. Судя по примерам и тексту новости это тупой доступ
> к базе, для которого еще и "код" зачем то писать надо.
> PHPMyAdmin дает тоже самое, только с большими возможностями и без ручного
> написания "кода". Ну и не могу не отметить, что в перловых
> ORM такой "код" пишется автоматически.это ведь не аналог phpMyAdmin!
это утилита для развёртывания админ интерфейс-ов для веб сайтов, призвана упростить работу веб-разработчикам.
> Ну не знаю. Судя по примерам и тексту новости это тупой доступ
> к базе, для которого еще и "код" зачем то писать надо.
> PHPMyAdmin дает тоже самое, только с большими возможностями и без ручного
> написания "кода". Ну и не могу не отметить, что в перловых
> ORM такой "код" пишется автоматически.В рельсовых тоже. Я писал не про этот продукт, а про рубистов в целом. К коим я отношусь год как. Просто было бы удобно, если все было бы на Ruby...
Это в каких например?
> Это в каких например?Что каких? Инструментов? Смысл в том, чтобы не держать на серваке php, java, perl, python и прочее... Не углубляться в них. Знать только те ИНСТРУМЕНТЫ, которыми пользуешься. И C/C++, скриптовой язык - Ruby, в данном случае. Но это так, утопия...
> Это в каких например?Или в каких ORM? ActiveRecord, хотя мог неправильно понять постера.
Именно!
Раз уж "в перловых ORM такой код пишется автоматически", то хотелось бы увидеть пример этого самого автоматического написания.
В идеале - как мне с минимальными усилиями "автоматически написать" веб-морду для изменения\добавления нескольких полей в одной из таблиц существующей sqlite db.
> Именно!
> Раз уж "в перловых ORM такой код пишется автоматически", то хотелось бы
> увидеть пример этого самого автоматического написания.
> В идеале - как мне с минимальными усилиями "автоматически написать" веб-морду для
> изменения\добавления нескольких полей в одной из таблиц существующей sqlite db.Ну значит неправильно понял. "Код пишет автоматически" - какой код, вопрос...
Saint не интегрируется напрямую в ORM, так как спроектирован как веб-интерфейс для разных ORM.
На данный момент поддерживается только DataMapper и ведётся работа над Sequel адаптером.
ActiveRecord тоже входит в планах.Цена поддержки разных ORM не так уж велика - нужно просто указать модель и декларировать редактируемые поля.
Ну а дальше уже можно декларировать ассоциации и фильтры.
Ну посмотри на DBIx::Class. В одну консольную команду получаешь готовые классы для всех своих таблиц, то бишь большую часть 100 строчного кода из ссылки в статье. Для sqlite есть простенький ORLite. Ну а отображение ORM в веб это уже ручками писать надо, так как именно там вся логика и как следствие ценность программы. Если же тебе нужно только просмотр/редактирование таблиц без всякой логики, как в saint, то ставишь PHPMyAdmin/phpSQLiteAdmin/итд и ничего писать вообще не надо.
> Ну посмотри на DBIx::Class. В одну консольную команду получаешь готовые классы для
> всех своих таблиц, то бишь большую часть 100 строчного кода из
> ссылки в статье. Для sqlite есть простенький ORLite.Насколько я понял из документации ORLite и DBIx::Class это как раз аналоги DataMapper, для которого $subj и сделан.
> Ну а отображение
> ORM в веб это уже ручками писать надо, так как именно
> там вся логика и как следствие ценность программы.Вот именно это $subj и упрощает, заменяя "ручками", на некий полу-автоматический код.
Другое дело, что цельной понятной документации как от таблицы перейти непосредственно к Saint нету, соответственно данный проект рассчитан только на тех, кто уже давно и прочно использует DataMapper.
> Если же тебе
> нужно только просмотр/редактирование таблиц без всякой логики, как в saint,
> то ставишь PHPMyAdmin/phpSQLiteAdmin/итд и ничего писать вообще не надо.уважаемый @angra, вы никак не вникли в суть Saint.
а суть именно в том чтобы создавать логичные интерфейсы.> отображение ORM в веб это уже ручками писать надо
вот именно тут Saint и поможет!
вам не надо будет писать HTML и CRUD, только пару строк Ruby и полноценная админка готова,
с ассоциациями между таблицами, с фильтрами, с пагинацией итд
Покажите мне пример на этом saint позволяющий из одного datetime поля в БД сделать поля день/месяц/год/часы/минуты/секунды в веб интерфейсе, а также возможность отредактировать день/месяц/год через календарик, желательно с i10n и валидацией на клиентской и серверной стороне с кастомными ограничениями. Вообще любое составное поле разбить на несколько и наоборот. Превратить числовое поле в картинки или слайдеры. Корректно отобразить связь сложнее чем master-detail. Все это опять таки с i10n, валидацией итд.
Для тупого же crud, в том числе и в REST стиле в том же Catalyst есть готовые плагины, писать опять придется меньше чем в saint. Вот только зачем вообще для этих целей web-framework, если достаточно готовых админок для БД?
> Покажите мне пример на этом saint позволяющий из одного datetime поля в
> БД сделать поля день/месяц/год/часы/минуты/секунды в веб интерфейсе, а также возможность
> отредактировать день/месяц/год через календарик, желательно с i10n и валидацией на клиентской
> и серверной стороне с кастомными ограничениями. Вообще любое составное поле разбить
> на несколько и наоборот. Превратить числовое поле в картинки или слайдеры.
> Корректно отобразить связь сложнее чем master-detail. Все это опять таки с
> i10n, валидацией итд.как раз сейчас ведётся работа над автоматизацией Date/Time columns,
которые будут доступны в следующем релизе.
> Для тупого же crud, в том числе и в REST стиле в
> том же Catalyst есть готовые плагины, писать опять придется меньше чем
> в saint.Saint не для Perl а для Ruby
> Вот только зачем вообще для этих целей web-framework, если
> достаточно готовых админок для БД?здесь и кроется весь конфуз.
да, Saint инструмент для админа,
но не для сис-админа а для веб-админа!имеется в виду что веб-разработчик сможет оперативно создать веб-админ-интерфейс,
монтировать его в http://site-klienta.com/admin/ и представить клиенту.ибо, повторюсь, веб-разработчик не "пошлёт" клиента редактировать контент через сис-аминские утилиты :)
Saint-у нужен web-framework потому что он создаёт часть сайта, а именно бэкенд часть.
сис-админам Saint врятли подходит, так как надо сначала перевести таблицы БД в DataMapper ORM классы.
когда для солидных веб-проектов это первичное требование.
>> В рамках проекта Saint подготовлен инструментарий, который позволяет быстро и
>> просто генерировать web-интерфейсы для управления данными в произвольных
>> таблицах БД, путем создания каркаса на языке RubyАналог 1С-ного конфигуратора?
А для php есть такое?
Есть автогенерация админки в symfony
> Есть автогенерация админки в symfonySaint ничего не генерирует.
всё строиться "на лету", без генерации каких-либо артефактов.
Эта уита лишь сейчас в 2012м, стала аналогом давно написанного ApEx - бывшей HTMLDB (гуглить до просветления).
> Эта уита лишь сейчас в 2012м, стала аналогом давно написанного ApEx -
> бывшей HTMLDB (гуглить до просветления).Причем уевым аналогом. ApEx позволяет строить приложения любой сложности. И уже давно позволяет!
>> Эта уита лишь сейчас в 2012м, стала аналогом давно написанного ApEx -
>> бывшей HTMLDB (гуглить до просветления).
> Причем уевым аналогом. ApEx позволяет строить приложения любой сложности. И уже давно
> позволяет!согласен, ApEx рулит!
но скажем клиент заказал веб-сайт.
вы ведь не "пошлёте" его добавлять контент через ApEx :)
а создадите красивый админ для сайта которым клиент будет доволен.
и чтобы не писать HTML и CRUD, вы просто говорите Saint-у что надо редактировать и как,
и он создаёт полно-функциональный админ за вас.
>>> В рамках проекта Saint подготовлен инструментарий, который позволяет быстро и
>>> просто генерировать web-интерфейсы для управления данными в произвольных
>>> таблицах БД, путем создания каркаса на языке Ruby
> Аналог 1С-ного конфигуратора?
> А для php есть такое?это не Аналог 1С-ного конфигуратора.
это аналог ActiveAdmin для веб-сайтов, только свободен от Rails.
>>>> В рамках проекта Saint подготовлен инструментарий, который позволяет быстро и
>>>> просто генерировать web-интерфейсы для управления данными в произвольных
>>>> таблицах БД, путем создания каркаса на языке Ruby
>> Аналог 1С-ного конфигуратора?
>> А для php есть такое?
> это не Аналог 1С-ного конфигуратора.
> это аналог ActiveAdmin для веб-сайтов, только свободен от Rails.Это жалкое подобие левой руки.
>>>>> В рамках проекта Saint подготовлен инструментарий, который позволяет быстро и
>>>>> просто генерировать web-интерфейсы для управления данными в произвольных
>>>>> таблицах БД, путем создания каркаса на языке Ruby
>>> Аналог 1С-ного конфигуратора?
>>> А для php есть такое?
>> это не Аналог 1С-ного конфигуратора.
>> это аналог ActiveAdmin для веб-сайтов, только свободен от Rails.
> Это жалкое подобие левой руки.аргументы в студию пожалуйста :)
Люди, сори за офтоп, но все же - посоветуйте подобное сабжу, но для C++, только в виде генератора кода согласно некого макросоподобного кода?
> Люди, сори за офтоп, но все же - посоветуйте подобное сабжу, но
> для C++, только в виде генератора кода согласно некого макросоподобного кода?Вряд-ли: в тексте новости ошибка. Авторы позиционируют свой проект как
A simple backend to easily manage ORM models.
То есть никакой работы с "таблицами бд" нет и не предполагается - это просто ошибка переводчика.
Ну а в с++ соответственно эти самые ORM models отсутствуют насколько я знаю.