- Сообщений: 247
- Спасибо получено: 537
Подключение сторонних гемов
Вывод: К игре можно подключить гемы, но я пока что не знаю как подключить любой гем. Во первых есть проблема с тем, что руби в игре немного старое, и немного урезанное, некоторые классы стандартной библиотеки отсутствуют (Etc к примеру), а многие гемы их используют. Во вторых я не знаю пока как работать с гемами с extension (но я точно знаю что можно).
И так, сразу напишу что такое гемы - это крассивое название для сторонних библиотек, оформленных стандартным образом. Это ненмого похоже на сторонние скрипты, которые вы копируете в игру, но чаще всего файлов там гораздо больше чем один. Давайте рассмотрим гем cancan , который мы будем сегодня вставлять в проект. Пока что все что нас интересует - это папка lib, в ней лежит весь код, который нам нужен. Обычно используют Rubygems (часть руби, которая работает с гемами, и которая кстати вырезана из руби игры) для установки гема. Все что rubygems сделают для cancan - это скачают гем, сохранят его, и что самое важное - добавят путь к папке lib гема в $LOAD_PATH. В нормальном проекте вы теперь можете просто написать
Так же расскожу о extensions. Стандартная реализация руби написана на Си (да да, один язык написан на другом языке, можете на досуге подумать о проблеме яйца и курицы). Руби - скриптовый язык, что означает что его код не нужно компилировать (переводить в бинарный машинный код) перед исполнением. Так же плюс скриптовых языков - на них обычно писать гораздо легче, чем на компилируемых, они крассивее (руби вообще самый крассивый язык
Довольно лирики, приступим к методике.
Для начала создадим новый проект, открываем редактор скриптов и вставляем в новый скрипт следуещее:
Продолжаем эксперимент - берем редактор кода (не из игры, сторонний, рекомендую subline), создаем файл hello.rb со следующим кодом:
Однако беда в том, что многие гемы имеют зависимости от других гемов, т.е. чтобы такой зависимый гем работал, мы должны еще и подгрузить в проект код другого гема. Добавте к этому версионность гемов, и можно сойти сума
Теперь самое сложное в нашей затее - перейти в этой гребанной недоконсоли в папку с проектом. Для начала набираем (заменяем Е на диск где у вас лежит проект)
Теперь открываем subline и создаем файл Gemfile (именно так, без расширения вообще)
символ '>=' - "версия больше или равная". Так вот ~> правильный способ, а >= неправильный, гореть разработчикам pry за это в аду. Bundler когда видит в зависимостях ~> ставит версию близкую к указанной, когда же видит >= ставит саму последнюю доступную, которая может быть не совместима с нашими руби 1.9.2. Т.е. мы должны прямо попросить Bundler поставить нужную версию. В этом случае с pry Gemfile выглядел бы так:
Ок, мы разобрались с нашим Gemfile для канкан. Теперь разворачиваем консоль (вы же ее не закрыли, да?) и запускаем
На данном этапе у нас есть проект, файл Gemfile, папочка gems, папочка cancan-1.5.1 в ней. Теперь нам нужно подгрузить cancan в проект.
Открываем редактор скриптов в игре, создаем скрипт в самом верху (гемы нужно загружать до их использования) называем его как нибудь Gems_Loader и вводим туда
Ну а для тех кто мне не верит, напишу немножко кода, который докажет что мы можем использовать cancan в игре. Для начала три слова о том что такое cancan - это гем для RoR, который позволяет гибко управлять правами юзера (так нам автор говорит). Но на самом деле он позволяет гибко описывать условия, для if, while и т.п. Короткий пример от балды:
Теперь к делу - создаем скрипт в редакторе скриптов в игре, называем его Ability
Запускаем игру - видим "BAR!" в консоли игры.
Вот собственно и все что я сегодня хотел сказать, потратил пол выходного, надеюсь вам будет полезно, спасибо за внимание!
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Также, спасибо за статью, она получилась очень подробной и простой для понимания, это приятно)
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Если вы хотите, чтобы ваши гемы работали в проекте, в пути к которому есть не ANSII символы, то рекомендую использовать этот загрузчик
Скрипт загрузчика часто модифицируется, актуальную версию можно взять на гитхабе
Вставте код загрузчика в скрипты проекта, и добавте этот код
Что важно - предполагается, что гемы вы сохраняете в папке gems.
Скрипт заюзает стандартный механизм, когда проект сохранен в папке с нормальным путем, и загрузит файлы через File.load, когда стандартный механизм дал сбой.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Все зависимости внёс в папку, но выдает LoadError.
{0001}:81:in `founded_path'
{0001}:77:in `load'
{0001}:26:in `rescue in require'
{0001}:23:in `require'
{0001}:93:in `<main>'
{0001}:77:in `eval'
{0001}:77:in `load'
{0001}:26:in `rescue in require'
{0001}:23:in `require'
{0001}:94:in `<main>'
{0001}:77:in `eval'
{0001}:77:in `load'
{0001}:26:in `rescue in require'
{0001}:23:in `require'
{0001}:93:in `<main>'
{0001}:77:in `eval'
{0001}:77:in `load'
{0001}:26:in `rescue in require'
{0001}:23:in `require'
{0002}:19:in `block in <main>'
{0002}:15:in `each'
{0002}:15:in `<main>'
ruby:in `eval'
Код загрузки гемов:
* wr - аналог puts, взял отсюда
Возможно, немного ошибся темой.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
2. Зачем тебе i18n от рельсов? Подключай github.com/svenfuchs/i18n/blob/master/i18n.gemspec , гем от рельсов это обертка над этим гемом. Тогда уйдет зависимость от ralities, и видимо, от activesupport, actionpack и т.п. Sourcecode точно имеет extension а их, как минимум, скомпилировать нужно будет. Только скорее всего внутри i18n все равно загружается yaml, а его тоже в мейкере нет.
3. SideScriptsLoader.add_gems_to_path нужно делать только один раз.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
2. Спасибо, посмотрю. Видимо, не в ту сторону рыть начал.
3. О, вот этого не было в примерах или я не так прочитал их.
А ведь всего лишь нужно получать текущую локаль системы, хех.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
