Re: Having configuration-data in a package with multiple instances of the same app

Seb <[email protected]> Thu, 19 Dec 2019 12:30:26 +0100 (CET)
Newsgroups gmane.comp.web.mason.user
Message-ID <[email protected]>
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

---1155178722-1032234494-1576754991=:27617
Content-Type: text/plain; CHARSET=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8BIT
Content-ID: <[email protected]>


Hi,


> As far I see %config from your 1st sample is not available outside the 
> autohandler. Otherwise I would do it that way.

Ah yes, sorry, I forgot that I had made %config a global variable in 
Apache:

# grep config <site>.conf
         PerlAddVar MasonAllowGlobals %config

Best regards,
Sébastien.

> On 19.12.19 10:02, Seb wrote:
>> 
>> Hi,
>> 
>> 
>> Using a library is but one a several ways to make an information available 
>> to all parts of your website. For the need you describe, perhaps you would 
>> get an equivalent functionality by setting
>>     our %config = (
>>         'getColor' => 'red',
>>     );
>> in the autohandler. Then any component could use $config{'getColor'}.
>> 
>> If you really want, or need, a library, I suggest you make subcases in 
>> "sub getColor" according to the DOCUMENT_ROOT, eg
>>     return ($ENV{'DOCUMENT_ROOT'} eq "···") ? "red"
>>          : ($ENV{'DOCUMENT_ROOT'} eq "···") ? "blue"
>>          : "black";
>> NB: I haven't tested this; perhaps you would need to call your function as 
>> MyConfig::getColor($ENV{'DOCUMENT_ROOT'}) instead.
>> 
>> 
>> Kind regards,
>> Sébastien.
>> 
>> [email protected] (Thu, 19 Dec 2019):
>> 
>>> Hello!
>>> 
>>> Thanks for support.
>>> 
>>> Here is the essential of my sample for app1 and app2. I try to put a 
>>> config-item (the color) into a package. The color should be different 
>>> between app1 and app2.
>>> The config-package has in every app the same name MyConfig (that may be 
>>> the problem). I can resolve the problem if I make MyConfig1 for app1 and 
>>> MyConfig2 for app2.
>>> But lets think I have not 2 apps but 10. I would need to change every 
>>> apperance of MyConfig::getColor in the code.
>>> 
>>> Cheers
>>> Chris
>>> 
>>> 
>>> --app1/autohandler--
>>> % $m->call_next ();
>>> <%init>
>>> use strict;
>>> use warnings;
>>> use lib "/var/www/html/app1";
>>> use MyConfig;
>>> </%init>
>>> 
>>> 
>>> --/app1/MyConfig.pm--
>>> package MyConfig;
>>> sub getColor
>>> {
>>>      return "red";
>>> }
>>> 1;
>>> 
>>> 
>>> --app2/index.mas--
>>> <% MyConfig::getColor () %>
>>> 
>>> 
>>> --app2/autohandler--
>>> % $m->call_next ();
>>> <%init>
>>> use strict;
>>> use warnings;
>>> use lib "/var/www/html/app2";
>>> use MyConfig;
>>> </%init>
>>> 
>>> 
>>> --/app12MyConfig.pm--
>>> package MyConfig;
>>> sub getColor
>>> {
>>>      return "blue";
>>> }
>>> 1;
>>> 
>>> --app2/index.mas--
>>> <% MyConfig::getColor () %>
>>> 
>>> 
>>> 
>>> 
>>> 
>>> On 19.12.19 02:41, Han Do Jin wrote:
>>>> Can you show us your autohandler? I think maybe you should be using 
>>>> <%attr> to affect a shared template rather than put configs into a shared 
>>>> library. I'm guessing when you say you want same application 2nd time on 
>>>> same server that they are both running in the same apache instance? I run 
>>>> multiple sites (virtualhosts) on the same apache instance and use a few 
>>>> techniques for altering the core/shared master template as well as which 
>>>> database to connect to. Let's see what you are trying to accomplish and I 
>>>> can try and offer you some more concrete examples.
>>>> 
>>>> Chris
>>>> 
>>>> 
>>>> On Wed, Dec 18, 2019 at 5:16 PM [email protected] 
>>>> <mailto:[email protected]> <[email protected] 
>>>> <mailto:[email protected]>> wrote:
>>>> 
>>>>     Hello!
>>>> 
>>>>     I am new to Mason and have a little problem in having the same
>>>>     application (but with different configuration) multiple times on a
>>>>     server in different paths.
>>>>     Think the problem is because of the global scope of packages.
>>>> 
>>>>     I have the configuation data in a package - lets say MyConfig.
>>>> 
>>>>     e.g.
>>>>     package MyConfig;
>>>> 
>>>>     sub getColor
>>>>     {
>>>>          return "red";
>>>>     }
>>>> 
>>>>     1;
>>>> 
>>>>     I load it in the autohandler and via MyConfig::getColor () it is
>>>>     available in all parts of the application.
>>>> 
>>>>     Lets say I wanna have the same application a 2nd time on the same
>>>>     server
>>>>     but with a different color.
>>>>     So both applications would have the same files but MyConfig.pm
>>>>     differs.
>>>> 
>>>>     That does not work. The color get mixed up unless I do not have
>>>>     unique
>>>>     names for the config-package (e.g. MyConfig1 in the 1st
>>>>     application and
>>>>     MyConfig2 in the 2nd) again.
>>>>     Thats not great because I also need to change every appearence of
>>>>     MyConfig::getColor () to the new name.
>>>> 
>>>>     Is there a way I can bring such static configuration data in the
>>>>     application in a more elegant way?
>>>> 
>>>>     Thanks for help!
>>>>     Chris
>>>> 
>>>> 
>>>>     _______________________________________________
>>>>     Mason-users mailing list
>>>>     [email protected]
>>>>     <mailto:[email protected]>
>>>>     https://lists.sourceforge.net/lists/listinfo/mason-users
>>>> 
>>> 
>>> 
>
---1155178722-1032234494-1576754991=:27617
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline


---1155178722-1032234494-1576754991=:27617
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Mason-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mason-users

---1155178722-1032234494-1576754991=:27617--