2010-02-24 1 views
4

Нелегко получить какие-либо полезные результаты от различных поисков по этой концепции - возможно, потому что это. Неправильно и/или b. неясный. По сути, я хотел бы написать приложение, которое работает как обычное веб-приложение, так и интерфейс командной строки. Я сделал это в древнем прошлом для sysadmin-y, используя Perl, но это не имело радости от использования Ruby/Rails.CLI-based «V» в Rails MVC?

Мне достаточно удобно с Rails самостоятельно, а также использовать автономный Ruby для всех типов CLI. То, что я ищу, - это лучшие методы, если они существуют, для расширения приложения Rails для обеспечения функциональности CLI.

Возможно, ответ такой же простой, как использование скрипта/бегуна и выполнение моего собственного «VC» при использовании моих моделей Rails ... Это то, что я планировал делать, но я думал, что отступлю и здравомыслящий, сначала проверьте этот подход. Мне сложно представить, как я использую любой элемент контроллера Rails, учитывая, что он так тесно связан с HTTP-запросами, но меня часто удивляет то, что придумали умные люди.

Спасибо за любые полезные ответы.

ответ

1

Я думаю, все зависит от того, хотите ли вы повторно использовать логику вашего контроллера. Если вы это сделаете, вы можете пойти по пути написания задачи Gem/Rake/автономного Ruby-скрипта, который делает HTTP-запросы к приложению и получает ответы как JSON/XML/обычный текст или что-то еще. Что-то вроде HTTParty идеально подходит для этого.

Второй вариант заключается в том, как вы описываете: приводьте свои модели Rails прямо из вашего собственного сценария и представляйте результаты.

+0

Да, я забыл отметить, что я сделал то, что вы описали (использование CLI с помощью ActiveResource, чтобы поговорить с моим Rails-приложением). Это сейчас в производстве, но через год или около того, живу с ним, я вполне уверен, что это неправильный способ сделать это. Простые запросы в порядке, но есть много сложного материала, который делается на стороне клиента, которого на самом деле не должно быть. Спасибо за ответ. – mjmac

0

Другой подход заключается в том, что веб-интерфейс выкладывается в CLI, чтобы что-либо сделать. Все, что стоит сделать, это в CLI, и сеть просто называет CLI для всех своих потребностей.

Шелкование немного дороже. Если это ухудшит производительность, используйте popen для загрузки CLI только один раз за веб-сессию. Затем вы можете запрограммировать команды (напишите на свой stdin через popen pipe) и получите результаты (прочитайте их из stdout через popen-канал), если CLI не загружается для каждой команды. Если CLI имеет значение «Я принимаю некоторые аргументы, делаю что-то и выхожу», а затем добавляю к нему новый режим «--stay-resident» или какой-то-такой, который переключает его на поведение, которое требуется веб-интерфейсу ,

+0

Возможно, это может работать для очень простых приложений. Однако приложение, которое я хочу продлить, много происходит на уровне Rails. Вождение CLI из Интернета, вероятно, приведет к множеству дублирующих функций, а также столкнется с некоторыми сложными проблемами безопасности. – mjmac

+0

Вы изменяете существующее приложение rails? Это меняет ситуацию. У меня была такая же работа. Чтобы избежать дублирования, я просто переместил весь код «сделать что-то» из рельсов и в CLI. Как вы говорите, это не хорошо для вас. –