OneScript.Web icon indicating copy to clipboard operation
OneScript.Web copied to clipboard

Объявление глобальных переменных приложения

Open pallid opened this issue 6 years ago • 11 comments

Хочется иметь возможность объявлять глобальные переменные приложения в модуле main.os

pallid avatar Jun 06 '18 07:06 pallid

@pallid они формально есть - уже средствами OScript

  • напишите в main.os #использовать model

а дальше вы можете об\ъявить свои модули подключения и свои классы

пример тут

https://github.com/EvilBeaver/os-hub-frontend/tree/master/src/model/modules - например ПереченьПакетов

и тогда этот подключаемый модуль доступен в контексте main.os

https://github.com/EvilBeaver/os-hub-frontend/blob/master/src/main.os

ghost avatar Jun 06 '18 07:06 ghost

@allustin Тогда придется вызывать установку переменных среды в разных местах

хотелось бы так

main.os


перем Бот Экспорт;

Процедура ПриНачалеРаботыСистемы()
	
       ТокенБота = ПолучитьПеременнуюСреды("TokenBot");
       Бот = Новый Бот(ТокенБота);
       ИспользоватьСтатическиеФайлы();
       ИспользоватьМаршруты();

КонецПроцедуры

ect

Результат = Бот.Метод();

pallid avatar Jun 06 '18 08:06 pallid

@pallid

Тогда придется вызывать установку переменных среды в разных местах

почему бы не сделать это один раз в "используемом" модуле?

nixel2007 avatar Jun 06 '18 08:06 nixel2007

@nixel2007 затрудняюсь представить как сделать так что бы "используемый" модуль был один, их много и в каждом используется свои переменные

pallid avatar Jun 06 '18 10:06 pallid

@pallid тут вот какое дело - глобальные в каком контексте ?

посмотрите на мои эксперименты - я сделал кластер с балансировщиком впереди, пока в парралельном форке https://github.com/silverbulleters-research/OneScript.Web/blob/feature/auth-and-backgroud/docker-scale-compose.yml#L16

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

Если соблюсти все формальности - то глобальные переменные всего кластера (приложения) должны жить в константах приложения, то есть внезапно в базе данных

То есть с глобальными переменными среды не все так просто как казалось бы

Константы приложения я так думаю можно будет делать вот через этот коммит когда он войдет в основной ствол https://github.com/EvilBeaver/OneScript.Web/commit/a9cd753655ee7389ad76984765461721f3aab5f0

Сейчас я делаю вот так

  • вариант инициализация через переменные среды https://github.com/silverbulleters-research/OneScript.Web/blob/feature/auth-and-backgroud/examples/auth0/src/main.os#L10 - пока вроде как этого достаточно
  • установка переменных происходит средстами docker-compose https://github.com/silverbulleters-research/OneScript.Web/blob/feature/auth-and-backgroud/docker-compose.yml#L20

ghost avatar Jun 06 '18 21:06 ghost

эээ, чуваки, вы прям тут дискутируете так... А задача для 1С - ника типичная, видеть гл. переменные из модуля приложения.

Сейчас вот прям как есть - так сделать нельзя. Обычно объявляется некий общий модуль с экспортными свойствами, подключается через Использовать, а потом в программе юзается вот так:

СделатьХорошее(МойМодульКонстант.МояНастройка);

EvilBeaver avatar Jun 07 '18 11:06 EvilBeaver

Кстати, @pallid может лучше воспользоваться не Модулем, а Классом? Я не до конца уловил задачу...

EvilBeaver avatar Jun 07 '18 11:06 EvilBeaver

@EvilBeaver сейчас так и делаю

в контроллере

перем Бот ;

Процедура Index()
	
       БОТ= Новый Бот;
       БОТ.Токен = ПолучитьПеременнуюСреды("TokenBot");

КонецПроцедуры

думал еще что такая конструкция будет работать, чтоб каждый раз не получать переменные среды

перем Бот ;

Процедура Index()
	
 Если БОТ = Неопределено Тогда
       БОТ= Новый Бот;
       БОТ.Токен = ПолучитьПеременнуюСреды("TokenBot");
 КонецЕсли;
...


pallid avatar Jun 07 '18 11:06 pallid

@pallid такая конструкция будет работать. Не понял пока, что не так.

EvilBeaver avatar Jun 07 '18 12:06 EvilBeaver

@EvilBeaver Условие Если БОТ = Неопределено Тогда всегда истина

pallid avatar Jun 07 '18 12:06 pallid

Да, экземпляр контроллера создается каждый раз на вызов. Сохраняемое состояние нужно хранить либо в модуле, либо в сессии. А лучше вообще не хранить, т.к. к сайту будет доступ с разных клиентов и разных потоков.

EvilBeaver avatar Sep 25 '18 12:09 EvilBeaver