On Nov 17, 2011, at 8:48 AM, Richard Baron Penman wrote:
> OK domain1/sales
> (These are just examples - if would be helpful to have the exact
> settings and domains I am using we can have a private conversation.)
>
> The apps have different controllers.
With this router:
routers = dict(
BASE = dict(
domains = {
'domain1' : 'forum',
'domain2' : 'sales',
},
),
)
The logic for domain1/sales says this: It's domain1, so the app must be
'forum'. (If you've specified 'domains=', the router takes that to be
authoritative.)
There's no forum/sales controller, so sales must be a function in the default
controller of forum: forum/default/sales.
Which app/controller/function do you expect domain1/sales to resolve to?
>
> Richard
>
>
> On Fri, Nov 18, 2011 at 1:31 AM, Jonathan Lundell <[email protected]> wrote:
>> On Nov 17, 2011, at 8:20 AM, Richard Baron Penman wrote:
>>
>>> 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)
>>
>> domain/sales? Not domain1 or domain2?
>>
>> Do your two apps have exactly the same list of controllers?
>>
>>>
>>> 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).
>>>>>>
>>>>>>
>>>>>>
>>>>
>>>>
>>>>
>>
>>
>>