Загрузка гемов на лету

286 views
Skip to first unread message

Борис Пеньковский

unread,
Jun 5, 2014, 7:04:49 AM6/5/14
to ror...@googlegroups.com
Пытаюсь продумать систему плагинов для cms на rails, есть какие нибудь варианты живой подгрузки гемов(желательно не из папки, лежать будут в geminabox)? гуглил - не нашел

Сергей Соколов

unread,
Jun 5, 2014, 7:18:21 AM6/5/14
to ror...@googlegroups.com


5 июня 2014 г., 14:04 пользователь Борис Пеньковский <able...@gmail.com> написал:
Пытаюсь продумать систему плагинов для cms на rails, есть какие нибудь варианты живой подгрузки гемов(желательно не из папки, лежать будут в geminabox)? гуглил - не нашел

--
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на https://groups.google.com/group/ror2ru
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ
 
Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
ror...@googlegroups.com
---
Вы получили это сообщение, поскольку подписаны на группу "RubyOnRails to russian".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес ror2ru+un...@googlegroups.com.
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/ror2ru/5c0554e5-47a0-4670-8dda-8f8a9f67254b%40googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.

Борис Пеньковский

unread,
Jun 5, 2014, 7:29:40 AM6/5/14
to ror...@googlegroups.com
Auto-reload require files or local gems without restarting server during Rails development

Не хочу всю кодовую базу передавать с дистрибутивом cms, поэтому и ищу решение для гемов вытаскивания таким образом гемов из source а не папки

четверг, 5 июня 2014 г., 15:18:21 UTC+4 пользователь Сергей Соколов написал:

Ivan

unread,
Jun 5, 2014, 7:36:04 AM6/5/14
to ror...@googlegroups.com
поясните причины по которым в 2014 году делается очередная cms на rails? если не секрет

четверг, 5 июня 2014 г., 15:04:49 UTC+4 пользователь Борис Пеньковский написал:

Борис Пеньковский

unread,
Jun 5, 2014, 7:49:12 AM6/5/14
to ror...@googlegroups.com
Таков заказ, цмс для типовых сайтов с системой плагинов, шаблонами, драг анд дроп редактором и прочим блек джеком. А потом как оказалось сайты будут не совсем типовые, и специфичный функционал как например ЛК, каталог услуг и пр выносится в плагин и подключается по желанию того чей сайт.

четверг, 5 июня 2014 г., 15:36:04 UTC+4 пользователь Ivan написал:

Alex

unread,
Jun 5, 2014, 7:51:30 AM6/5/14
to ror...@googlegroups.com
Не сделаете вы битртикс.


--
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на https://groups.google.com/group/ror2ru
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ
 
Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
ror...@googlegroups.com
---
Вы получили это сообщение, поскольку подписаны на группу "RubyOnRails to russian".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес ror2ru+un...@googlegroups.com.
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/ror2ru/c1b9111e-1b21-436c-b599-c59c517c22b7%40googlegroups.com.

Ivan

unread,
Jun 5, 2014, 8:01:05 AM6/5/14
to ror...@googlegroups.com
И какова стоимость вопроса?

четверг, 5 июня 2014 г., 15:49:12 UTC+4 пользователь Борис Пеньковский написал:

Борис Пеньковский

unread,
Jun 5, 2014, 8:12:14 AM6/5/14
to ror...@googlegroups.com
Топик не об этом

четверг, 5 июня 2014 г., 16:01:05 UTC+4 пользователь Ivan написал:

Константин Грабарь

unread,
Jun 5, 2014, 8:22:00 AM6/5/14
to ror...@googlegroups.com
Ну в принципе можно использовать механизм загрузки архива с нужным плагином/гемом из .zip папки через вэб-интерфейс. Дальше автоматически его распаковывать в папку с проектом (читай инсталировать) и либо подхватывать на лету (через requie_reloader), либо рестартить целиком приложение.

Или я неправильно понял задачу?

05 июня 2014 г., в 16:12, Борис Пеньковский <able...@gmail.com> написал(а):

-- 
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на https://groups.google.com/group/ror2ru
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ
 
Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
ror...@googlegroups.com
--- 
Вы получили это сообщение, поскольку подписаны на группу "RubyOnRails to russian".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес ror2ru+un...@googlegroups.com.
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылкеhttps://groups.google.com/d/msgid/ror2ru/a25546c3-d46e-4105-a127-7de9fb83b27a%40googlegroups.com.

Борис Пеньковский

unread,
Jun 5, 2014, 8:57:08 AM6/5/14
to ror...@googlegroups.com
Этот гем подтягивает изменения 
It uses ActionDispatch::Callbacks.to_prepare to reload the require files before each request. In Rails 3.2, it uses watchable_dirs to reload only when you modify a file

Ладно бы мне надо было просто какой нибудь класс подтянуть, стоит потребность полноценно загружать гемы с их dependency

четверг, 5 июня 2014 г., 16:22:00 UTC+4 пользователь Konstantin Grabar написал:

Ivan

unread,
Jun 5, 2014, 1:00:43 PM6/5/14
to ror...@googlegroups.com
Ну вы сам себе злобный буратино значит

четверг, 5 июня 2014 г., 16:12:14 UTC+4 пользователь Борис Пеньковский написал:

Konstantin Grabar

unread,
Jun 6, 2014, 1:57:27 AM6/6/14
to ror...@googlegroups.com
На самом деле это достаточно интересный вопрос, как избежать проблему с зависимостями. Пока ничего дельного в голову не приходит, но вы дайте знать обязательно, если все-таки придумаете рабочую схему :)


5 июня 2014 г., 16:57 пользователь Борис Пеньковский <able...@gmail.com> написал:
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/ror2ru/5faf5309-600b-40c3-ad74-08d483160bc3%40googlegroups.com.

Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.



--
С уважением, Константин Грабарь!

Сергей Соколов

unread,
Jun 6, 2014, 2:52:08 AM6/6/14
to ror...@googlegroups.com
А в чем проблема запустить бандлер через тот же system, подождать пока он установит все зависимости, потом положить нужный гем в нужную директорию и сделать автолоад?


6 июня 2014 г., 8:57 пользователь Konstantin Grabar <san...@gmail.com> написал:
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/ror2ru/CAFWnJ%2B7EEnguHSbgnUmbAVLWKdMr4Ny1UxtXS4bRiW5-K4q60A%40mail.gmail.com.

Сергей Соколов

unread,
Jun 6, 2014, 3:03:09 AM6/6/14
to ror...@googlegroups.com
В любом случае имхо, в случае с зависимостями смотреть надо в сторону стандартного бандлера, самому это писать не стоит. Еще вопрос - может легче при необходимости установки гема - просто ставить его стандартными методами, а потом подменять инстанс сервера (по подобию zero-downtime deployment)?


6 июня 2014 г., 9:52 пользователь Сергей Соколов <sokolov....@gmail.com> написал:

Константин Грабарь

unread,
Jun 6, 2014, 3:58:11 AM6/6/14
to ror...@googlegroups.com
В плане запуска bundler’а и перезапуска инстансов все вроде понятно. Других разумных вариантов особо нет.

Вопрос в том, что если начнутся конфликты в зависимостях устанавливаемого плагина и основного приложения? Тогда установка завершится неудачно и придется лезть в консоль и устранять их руками. Надо тогда при создании плагина использовать строго описанные версии гемов без шага влево и вправо.

06 июня 2014 г., в 10:52, Сергей Соколов <sokolov....@gmail.com> написал(а):

Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/ror2ru/CA%2Bw0aRH%2B10KUqSU9z93Gmma%3D1xdL026c8Og7%3Dbxxw1-7vESqGg%40mail.gmail.com.

Сергей Соколов

unread,
Jun 6, 2014, 4:04:23 AM6/6/14
to ror...@googlegroups.com
Да, версии гемов, конечно, должны быть зафиксированы. Но по сути, я так понимаю, они и так будут зафиксированы - ведь под них что-то уже должно быть написано - иначе смысл просто в плагине, который ничего не делает.


6 июня 2014 г., 10:58 пользователь Константин Грабарь <san...@gmail.com> написал:
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/ror2ru/A19F0AFE-880D-4E32-AB0D-8383F27C7568%40gmail.com.

Борис Пеньковский

unread,
Jun 6, 2014, 4:39:42 AM6/6/14
to ror...@googlegroups.com
Попробовал на лету подключить енжин как гем "foo", засунул в гемфайл 
gem 'foo' , :path => "~/My Documents/Aptana Studio 3 Workspace/foo" 
В коде пишу 
`bundle update` 
В консоли пишет что все ок
Using foo (0.15.1) from source at ~/My Documents/Aptana Studio 3 Workspace/foo
Но  require 'foo' ругается что нет такого файла, только после перезапуска сервака уже все начинает видеть

пятница, 6 июня 2014 г., 11:58:11 UTC+4 пользователь Konstantin Grabar написал:

Denis Bakhtin

unread,
Jun 6, 2014, 7:53:15 AM6/6/14
to ror...@googlegroups.com
Прошу прощения, если я неправильно въехал в тему и не знаю настолько глубоко рельсы, но дерзнул таки проверить сию примитивную конструкцию:

Контроллер
class RestartController < ApplicationController
   def background
      respond_to do |format|
        format.js do
          exec "cd #{Rails.root} && sh install_gems_and_restart &"
        end
     end
   end
end

скрипт install_gems_and_restart:
#!/bin/bash
bundle install > ./log/bundle.log
kill -9 `cat ./tmp/pids/server.pid`
bundle exec rails server -d

И кнопка в любой удобной вьюхе:
= button_to 'Restart server', '/restart/background', remote: true

Это для development, для продакшана я думаю можно в контроллере проверять среду и вызывать другой скрипт, где перезапускается юникорн там или какой надо веб сервер.

После перезагрузки можно как-нить выводить log/bundle.log, чтобы смотреть все ли прошло успешно, ну и вообще украсить рюшечками там.

А так, на первый взгляд, все перезагружается и устанавливается.


6 июня 2014 г., 12:39 пользователь Борис Пеньковский <able...@gmail.com> написал:
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/ror2ru/682c0fe9-8ff4-4dc6-99b0-d6595ffc1141%40googlegroups.com.

Борис Пеньковский

unread,
Jun 6, 2014, 8:06:46 AM6/6/14
to ror...@googlegroups.com
С перезагрузкой то все понятно и так
А если вываливается эксепшен, вдруг версия не та или еще что, конфликт какой нибудь в плагинах? сайт просто ложится и не встает, и как его потом поднимать человеку который с CMS только работает, контролировать баш скриптом выполнение установки? и если что то пошло не так - удалять гем с гемфайла и запускать сервак без него - похоже на костыль)

пятница, 6 июня 2014 г., 15:53:15 UTC+4 пользователь Denis Bakhtin написал:

Renat Ibragimov

unread,
Jun 6, 2014, 8:23:32 AM6/6/14
to ror...@googlegroups.com
Пусть плагины будут сразу загружены в приложении, но "не активны", когда надо они будут доступны в админке.

четверг, 5 июня 2014 г., 17:04:49 UTC+6 пользователь Борис Пеньковский написал:

Denis Bakhtin

unread,
Jun 6, 2014, 8:27:50 AM6/6/14
to ror...@googlegroups.com
Естественно нужно производить обработку ошибок. И до юзера, которому подарили ноутбук вчера и сказали "жми сюда - щас все будет" еще много че доработать надо. А не костыль это то, что уже в готовом геме кем-то сделано, протестировано и выложено на гитхаб? )


6 июня 2014 г., 16:06 пользователь Борис Пеньковский <able...@gmail.com> написал:
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/ror2ru/766f1753-9c60-436d-8027-9c4067d125ca%40googlegroups.com.

Alex

unread,
Jun 6, 2014, 8:31:40 AM6/6/14
to ror...@googlegroups.com
Ну и теперь осталось вставить редактор кода самого приложения из рельсового приложения и добавить типовые конфиги гемов для начинающих.


Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/ror2ru/CAO4YgXGvL7mx6mNpPoOqJ4AEW94Uw7V6rbO3wn9%2Bh-1NbskHSw%40mail.gmail.com.

Борис Пеньковский

unread,
Jun 6, 2014, 8:52:37 AM6/6/14
to ror...@googlegroups.com
Естественно нужно производить обработку ошибок. И до юзера, которому подарили ноутбук вчера и сказали "жми сюда - щас все будет" еще много че доработать надо. А не костыль это то, что уже в готовом геме кем-то сделано, протестировано и выложено на гитхаб? )
 
Я хотел использовать механизм живой подгрузки без перезагрузки приложения, костыль это то что мне предлагают - эмулировать такое же поведение баш скриптом и временным убиванием сервера. 

Ну и теперь осталось вставить редактор кода самого приложения из рельсового приложения и добавить типовые конфиги гемов для начинающих.
 
Там не будет полного набора гемов, а только адаптированные под платформу, к примеру плагин интеграции c exchange, добавляющий в список доступных виджетов календарь который тащит событи через api и т.п.

пятница, 6 июня 2014 г., 16:31:40 UTC+4 пользователь apavlyut написал:

Сергей Соколов

unread,
Jun 6, 2014, 9:04:46 AM6/6/14
to ror...@googlegroups.com
костыль это то что мне предлагают - эмулировать такое же поведение баш скриптом и временным убиванием сервера. 
Вы плохо прочитали. Вам предлагают подменить инстансы - для юзера приложение лежать не будет. И это как раз не костыль, в отличии от попытки резолва зависимостей руками. 


6 июня 2014 г., 15:52 пользователь Борис Пеньковский <able...@gmail.com> написал:
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/ror2ru/8031691e-fcfe-451d-b1c0-11fd10ee4e49%40googlegroups.com.

Denis Bakhtin

unread,
Jun 6, 2014, 9:12:59 AM6/6/14
to ror...@googlegroups.com
Не буду спорить, на капистрано перезагружает сервер и не обламывается.
Ок, вот еще что можно, мало ли пригодится:

Gemfile:
source 'https://rubygems.org'
gem 'rails', '4.0.0'

#blablabla

user_gemfile = './public/system/Gemfile.user'
if File.exists?(user_gemfile) then
    begin
      eval File.read(user_gemfile), get_binding('bye')
    rescue => err
      puts "Can't install gems in #{user_gemfile}"
    end  

end
В файл Gemfile.user можно писать те гемы, которые доустанавливаются. В принципе можно по файлу генерить на каждый гем юзера так, чтобы если один окажется косячный, остальные гемы не отвалились. 


6 июня 2014 г., 17:04 пользователь Сергей Соколов <sokolov....@gmail.com> написал:
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/ror2ru/CA%2Bw0aRHZ6TvqQKGcmau7FrJQ-Mr2N-HEk1zXznrv1GZhu6bLcQ%40mail.gmail.com.

Denis Bakhtin

unread,
Jun 6, 2014, 12:12:22 PM6/6/14
to ror...@googlegroups.com
В баше же можно проверить, удачно произошел запуск сервера и в случае ошибки вернуть старый гемфайл.


6 июня 2014 г., 17:12 пользователь Denis Bakhtin <denis....@gmail.com> написал:

Борис Пеньковский

unread,
Jun 24, 2014, 3:50:29 AM6/24/14
to ror...@googlegroups.com
Не пашет так, в консольке то сервер вижу запущен, а в браузере не отвечает.


пятница, 6 июня 2014 г., 15:53:15 UTC+4 пользователь Denis Bakhtin написал:
Прошу прощения, если я неправильно въехал в тему и не знаю настолько глубоко рельсы, но дерзнул таки проверить сию примитивную конструкцию:
Reply all
Reply to author
Forward
0 new messages