<br><div class="gmail_quote">On Mon, Mar 15, 2010 at 9:07 AM, Dmitry Belayev <span dir="ltr">&lt;<a href="mailto:rumata-estor@nm.ru">rumata-estor@nm.ru</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Compile-type checking can be very helpful and it is Haskell&#39;s strong side.<br>
<br>
But what about hot code swapping? In working web application it is often convenient to update some part of application without disturbing connected users. It&#39;s strong side of Erlang, but what about Haskell?<br>
<br></blockquote><div><br></div><div>That&#39;s definitely a good point. My current deployment uses lighttpd/CGI to server the application, along with a development system running on 3000. Here&#39;s my workflow:</div><div>
<br></div><div>1) Develop on local system using simple-server.</div><div>2) Push changes to development system. Who cares about a little downtime there.</div><div>3) When everything works, pull changes into the production repo.</div>
<div>4) Compile everything with -Wall -Werror.</div><div>5) Copy templates, static files and CGI binary in one fell swoop to the production directory.</div><div><br></div><div>So this is really a solution outside of Haskell. I believe Turbinado used some features for dynamically compiling code, but I prefer this kind of approach in general.</div>
<div><br></div><div>If I was during a standalone server approach, one possibility for production deployment might be:</div><div><br></div><div>1) Run the production server on port 3001 (or anything else). Set up iptables to forward port 80 to port 3001. (I do this already).</div>
<div>2) When I want to make a production change, start a *new* production server on port 3002.</div><div>3) Adjust iptables to port forward to 3002.</div><div>4) Next time around, switch back to 3001.</div><div><br></div>
<div>For the record, I think iptables forwarding is probably the safest way to run an application on a privileged port.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

Michael Snoyman wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div></div><div class="h5">
And part 2:<br>
<br>
Yesod is still missing a model layer. This is a project that I will most likely be doing myself, since it will need to be designed to integrate very closely with Yesod, but I&#39;ll mention some of the design ideas here. (By the way, Chris Eidhof has a package on Github called Basil which looks very interesting here.)<br>

<br>
1) I want to use YAML quasi-quoting to define the models.<br>
2) I don&#39;t want a super-complex &quot;object relational mapping&quot;; Haskell is already much closer to the relational level than an OO language.<br>
3) Utilize IO thunks (ie, lazy IO loading) so that we don&#39;t need to load everything into memory at the beginning.<br>
4) Not tied down to SQL *or* in-memory databases. It should support both of those, but *also* support a system that is usable even in a CGI setup. I&#39;m contemplating now a database that uses multiple directories/files and uses append-only to avoid concurrency issues.<br>

<br>
<br>
Compile-time checking of templates would be great. The Bravo package looks interesting, but I&#39;m a little dubious about the approach used. I think something based on typeclasses might be a bit more nimble. Once again, tight integration with the model system I theoretically design would be nice.<br>

<br>
<br>
So, in summary of a much-too-long e-mail, let&#39;s not bother trying to get everyone to agree on One Framework. Happs has its place, Yesod has its place, and I know others are using Loli and probably Kibro. (I&#39;m not sure if anyone every got started with Turbinado.) However, we can raise the bar for *all* packages simultaneously by making a more solid ecosystem of Haskell web packages available that any framework can cherry-pick from.<br>
</div></div>
------------------------------------------------------------------------<br>
<br>
_______________________________________________<br>
web-devel mailing list<br>
<a href="mailto:web-devel@haskell.org" target="_blank">web-devel@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/web-devel" target="_blank">http://www.haskell.org/mailman/listinfo/web-devel</a><br>
  <br>
</blockquote>
<br>
</blockquote></div><br>