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.

e...@coderhacks.com (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 e...@coderhacks.com <mailto:e...@coderhacks.com> <e...@coderhacks.com <mailto:e...@coderhacks.com>> 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
    Mason-users@lists.sourceforge.net
    <mailto:Mason-users@lists.sourceforge.net>
    https://lists.sourceforge.net/lists/listinfo/mason-users


_______________________________________________
Mason-users mailing list
Mason-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mason-users

Reply via email to