Использование Rails для создания графического интерфейса для существующего скрипта CLI Ruby? - PullRequest
2 голосов
/ 10 октября 2010

Добрый день, ребята,

В настоящее время имеет немного философской головоломки. Я и несколько товарищей создали потрясающий сценарий ruby ​​CLI для анализа и управления данными. Он использует драгоценные камни, отвечает на запросы и является полностью функциональным и великолепным.

Мне было интересно, можно ли как-нибудь удерживать экземпляр этого класса в одном экземпляре и взаимодействовать с ним через веб-интерфейс, встроенный в рельсы. У меня приличный опыт работы с рельсами, но я не могу понять, как создать одноэлементный экземпляр в веб-приложении и как сделать его универсально доступным для всех классов / контроллеров.

Причина, по которой мне нужно создать синглтон, заключается в том, что мне нужно загрузить кучу данных, которые этот маленький скрипт прерывает и изменяет. Он основан на классах, но я не хочу переносить эти классы на использование activerecord, если мне это не нужно, поскольку он хранит все в памяти (и не занимает столько памяти).

Можно ли как-то просто импортировать скрипт, запустить его с необходимыми командами и затем сохранить этот объект в памяти на всю жизнь веб-приложения, или мне придется перенести классы / методы на AR или методы контроллера?

Приветствия

1 Ответ

1 голос
/ 11 октября 2010

Вы можете добавить инициализатор, который содержит оболочку Singleton для вашего объекта:

config / initializers / foo_factory.rb:

require 'foo'
class FooFactory
  class << self
    def foo
      @@foo ||= Foo.new(lots, of, params)
    end
  end
end

Из любого другого места, где вытеперь можно использовать:

FooFactory.foo.do_something

Обратите внимание, что это крайне ужасно , и вам, вероятно, не следует этого делать.Тем не менее, он будет делать то, что вы хотите: установить глобальный синглтон, который будет настроен только при запуске сервера.

Еще более короткое решение подобной ужасности - просто назначить свой единственный экземпляр Foo постоянной:

config / initializers / foo_singleton.rb:

require 'foo'
FooSingleton = Foo.new(lots, of, params)

В другом месте вы можете использовать:

FooSingleton.do_something

Обратите внимание, что это в основном лишь немного лучше, чемглобальная переменная, в которой вы не можете (легко) изменить значение FooSingleton.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...