OneScript.Web
OneScript.Web copied to clipboard
Объявление глобальных переменных приложения
Хочется иметь возможность объявлять глобальные переменные приложения в модуле main.os
@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
@allustin Тогда придется вызывать установку переменных среды в разных местах
хотелось бы так
main.os
перем Бот Экспорт;
Процедура ПриНачалеРаботыСистемы()
ТокенБота = ПолучитьПеременнуюСреды("TokenBot");
Бот = Новый Бот(ТокенБота);
ИспользоватьСтатическиеФайлы();
ИспользоватьМаршруты();
КонецПроцедуры
ect
Результат = Бот.Метод();
@pallid
Тогда придется вызывать установку переменных среды в разных местах
почему бы не сделать это один раз в "используемом" модуле?
@nixel2007 затрудняюсь представить как сделать так что бы "используемый" модуль был один, их много и в каждом используется свои переменные
@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
эээ, чуваки, вы прям тут дискутируете так... А задача для 1С - ника типичная, видеть гл. переменные из модуля приложения.
Сейчас вот прям как есть - так сделать нельзя. Обычно объявляется некий общий модуль с экспортными свойствами, подключается через Использовать, а потом в программе юзается вот так:
СделатьХорошее(МойМодульКонстант.МояНастройка);
Кстати, @pallid может лучше воспользоваться не Модулем, а Классом? Я не до конца уловил задачу...
@EvilBeaver сейчас так и делаю
в контроллере
перем Бот ;
Процедура Index()
БОТ= Новый Бот;
БОТ.Токен = ПолучитьПеременнуюСреды("TokenBot");
КонецПроцедуры
думал еще что такая конструкция будет работать, чтоб каждый раз не получать переменные среды
перем Бот ;
Процедура Index()
Если БОТ = Неопределено Тогда
БОТ= Новый Бот;
БОТ.Токен = ПолучитьПеременнуюСреды("TokenBot");
КонецЕсли;
...
@pallid такая конструкция будет работать. Не понял пока, что не так.
@EvilBeaver Условие Если БОТ = Неопределено Тогда всегда истина
Да, экземпляр контроллера создается каждый раз на вызов. Сохраняемое состояние нужно хранить либо в модуле, либо в сессии. А лучше вообще не хранить, т.к. к сайту будет доступ с разных клиентов и разных потоков.