<html><head></head><body>I think that might be better handled in the server configuration, you could use the same binary but spin up different processes using a different URWEB_PQ_CON for each subdomain. Adding a new school would just be a matter of creating a new DB on postgresql and updating the server's configuration file, I think.<br><br><div class="gmail_quote">On May 13, 2018 3:48:27 PM GMT+02:00, Simon Van Casteren <simon.van.casteren@gmail.com> wrote:<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div dir="ltr">I considered it briefly as I was doing some research on the topic. It's the first time I'll be running and deploying a SaaS app myself (I've so far always been on the programming side only) so it felt more natural to me to keep everything inside a single application. Running the application right now consists of me ssh'ing into a Linode and running the exe by hand. If I want to split this into one application per database (which does guarantee data security better, that's really nice) then deployment seems to become much more complicated. <div><br></div><div>But let's say I do go that route. Is using one of the new deployment tools a good idea for a just-started scenario? I appreciate how ur/web uses very basic and simple tools, eg: Using curl in the Worldffi project to do HTTP requests, not having editor tooling but having the compiler use standard error formatting so emacs picks it up automatically. This is in strong contrast to the javascript community where I normally reside, which likes to re-implement things a lot. So I'd like to know what advice the community has on the right tools for setting up a new application and database automatically (probably via the C FFI?) and then running and updating them together. I would like to note that adding and running new clients without any manual work is strongly preferred.</div><div><br></div><div>Because I don't have any idea of how I would handle this adding and deploying of clients, I can't weigh the two alternatives: Complicating the app with tenantIds, or complicating the deployment with seperate apps. </div></div><div class="gmail_extra"><br><div class="gmail_quote">2018-05-13 15:31 GMT+02:00 Adam Chlipala <span dir="ltr"><<a href="mailto:adamc@csail.mit.edu" target="_blank">adamc@csail.mit.edu</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div text="#000000" bgcolor="#FFFFFF">
<div class="m_1427308567734777397moz-cite-prefix">Can you explain why you don't want to
run separate applications with separate databases?<div><div class="h5"><br>
<br>
On 05/13/2018 05:50 AM, Simon Van Casteren wrote:<br>
</div></div></div><div><div class="h5">
<blockquote type="cite">
<div dir="auto">Hi,
<div dir="auto"><br>
</div>
<div dir="auto">I'm in the process of making a new application
for music schools, using ur/web for front and backend. I'm at
the point where I have two customers and am starting to
implement support for multiple clients/tenants in one DB
(postgres). I've been planning to implement multitenancy from
the start, but haven't had the time yet.</div>
<div dir="auto"><br>
</div>
<div dir="auto">Has anyone implemented a form of multitenancy in
ur/web before? </div>
<div dir="auto"><br>
</div>
<div dir="auto">I see two areas that need consideration. </div>
<div dir="auto"><br>
</div>
<div dir="auto">1. Deciding which user belongs to which tenant.
Ideally I'd have a seperate url for each tenant that I can
give out to my clients (=the schools), do some dns magic to
send them all to the same exe, extract the tenantname from the
url and save the tenantId in a cookie. Also ideally, the
user's url would not change, ie. All urls should go to <a href="http://myschool.coolschools.be" target="_blank">myschool.coolschools.be</a>
during a session, not getting redirected at all. This is all
in an ideal situation of course.</div>
<div dir="auto"><br>
</div>
<div dir="auto">2. Database access: I'll have tenantId columns
in all tables + foreign keys and indexes on these columns. I'm
a bit afraid I'll forget adding tenantId = cookie.tenantid
somewhere, so I was thinking I could make a function that
takes a sql_exp and a tenantId and adds these clauses to all
tables involved. Not 100% sure that will work but I think it's
possible, I haven't had to dive into the internals of sql_exp
yet. Secondly, I wonder if I can somehow declare my endpoints
to be tenantdepandent (all but the most general will be) maybe
via newtyping the transaction datatype and then allowing the
execute only sql queries that have the above function applied.
Just dreaming out loud here.</div>
<div dir="auto"><br>
</div>
<div dir="auto">I'd be very interested in any ideas or
examples! </div>
<div dir="auto"><br>
</div>
<div dir="auto">Simon </div>
</div>
</blockquote>
<br>
</div></div></div>
<br>______________________________<wbr>_________________<br>
Ur mailing list<br>
<a href="mailto:Ur@impredicative.com">Ur@impredicative.com</a><br>
<a href="http://www.impredicative.com/cgi-bin/mailman/listinfo/ur" rel="noreferrer" target="_blank">http://www.impredicative.com/<wbr>cgi-bin/mailman/listinfo/ur</a><br>
<br></blockquote></div><br></div>
</blockquote></div><br>
-- <br>
Sent from my Android device with K-9 Mail. Please excuse my brevity.</body></html>