in fact Bruno's suggestion to use the controllers variable does work for me. Previously I used what you suggest (see first post in this thread) and then only the default controller was exposed.
What error? Accessing domain/sales before returned this error: invalid function (default/sales) Richard On Fri, Nov 18, 2011 at 12:24 AM, Jonathan Lundell <[email protected]> wrote: > On Nov 16, 2011, at 11:53 PM, Richard Baron Penman wrote: > >> what web2py version are you using? I have 1.99.2 >> >> >> This is the only variable I have defined in routes.py: >> >> routers = dict( >> BASE = dict( >> domains = { >> 'domain1' : 'forum', >> 'domain2' : 'sales', >> }, >> >> controllers = ['default', 'appadmin', 'view'], # also tried >> 'ALL' but did not work >> ), >> ) > > Defining controllers= in the BASE router won't work. I'd expect this to work: > > routers = dict( > BASE = dict( > domains = { > 'domain1' : 'forum', > 'domain2' : 'sales', > }, > ), > ) > > With that router, what breaks, exactly? What incoming URL and what error > message? > >> >> >> On Thu, Nov 17, 2011 at 12:56 AM, Jonathan Lundell <[email protected]> >> wrote: >>> On Nov 16, 2011, at 5:32 AM, Richard Baron Penman wrote: >>> >>>> I found listing the controllers explicitly as Bruno mentioned fixed the >>>> problem. >>>> Previously domain/non-default-controller returned: invalid function >>>> (default/non-default-controller) >>>> I would expect all controllers to work by default. >>> >>> I wrote a unit test that isn't seeing a problem. Would you please suggest >>> an input URL that would cause the problem? >>> >>> Thanks. >>> >>> >>> def test_router_domains_fs(self): >>> ''' >>> Test URLs that map domains using test filesystem layout >>> ''' >>> routers = dict( >>> BASE = dict( >>> domains = { >>> "domain1.com" : "admin", >>> "domain2.com" : "welcome", >>> }, >>> ), >>> ) >>> >>> load(rdict=routers) >>> self.assertEqual(filter_url('http://domain1.com'), >>> '/admin/default/index') >>> self.assertEqual(filter_url('http://domain2.com'), >>> '/welcome/default/index') >>> self.assertEqual(filter_url('http://domain1.com/gae'), >>> '/admin/gae/index') >>> self.assertEqual(filter_url('http://domain2.com/other'), >>> '/welcome/other/index') >>> self.assertEqual(filter_url('http://domain1.com/gae/f1'), >>> '/admin/gae/f1') >>> self.assertEqual(filter_url('http://domain2.com/f2'), >>> '/welcome/default/f2') >>> self.assertEqual(filter_url('http://domain2.com/other/f3'), >>> '/welcome/other/f3') >>> >>> >>> >>> >>> >>> >>> >>>> >>>> Richard >>>> >>>> >>>> On Wed, Nov 16, 2011 at 2:36 PM, Jonathan Lundell <[email protected]> >>>> wrote: >>>>> On Nov 15, 2011, at 8:54 PM, Bruno Rocha wrote: >>>>> >>>>>> On Wed, Nov 16, 2011 at 2:34 AM, Massimo Di Pierro >>>>>> <[email protected]> wrote: >>>>>> this should not be the case. if it is is a bug. >>>>>> >>>>>> >>>>>> I found this some time ago and I tough it was the default behaviour. >>>>>> >>>>>> for the following worked >>>>>> >>>>>> routers = dict( >>>>>> BASE = dict( >>>>>> domains = { >>>>>> >>>>>> 'domain1.com' : 'app1', >>>>>> >>>>>> 'domain2.com' : 'app2', >>>>>> >>>>>> }, >>>>>> controllers=['default', 'appadmin', ..., ..., ..., ] >>>>>> ), >>>>>> ) >>>>>> >>>>>> I has to list every controller, also functions >>>>>> >>>>> >>>>> It shouldn't be necessary to list the controllers (and it's not a good >>>>> idea to list controllers explicitly in the BASE router; if you need a >>>>> controller list, put it in an app-specific section). >>> >>> >>> > > >

