<div dir="ltr"><div style>OK, so the proposed solution failed once I tried to pass in the module name as a variable. Even though enter! claims to take a module-path as an argument, this will not work:</div><div><br></div><div>
<div>(define name &quot;module.rkt&quot;)</div><div>(module-path? name) ; reports #t</div><div>(enter! name) ;  error: collection &quot;name&quot; not found</div></div><div><br></div><div style>enter! is treating &quot;name&quot; as a module path instead of resolving it as a defined term. What I can&#39;t tell is whether this is mandatory behavior for enter!, or if it&#39;s a bug in the enter! macro. (I did look at enter.rkt, but this week, it&#39;s over my head.)</div>
<div style><br></div><div style>Matthew Butterick<br></div><div style><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Apr 27, 2013 at 6:16 PM, Matthew Butterick <span dir="ltr">&lt;<a href="mailto:mb.list.acct@gmail.com" target="_blank">mb.list.acct@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">Aha, combining enter! with dynamic-require seems to do the trick:<div>
<br></div><div>(define (route req)</div><div>    (enter! &quot;module.rkt&quot;)</div><div>    (define foo (dynamic-require &quot;module.rkt&quot; &#39;foo))</div>
<div>    (response/xexpr `(p ,(format &quot;~a&quot; foo))))</div><div><br></div><div>Once this route is running in the web server, I can make changes to module.rkt, then click reload in the browser, and the changes will appear in the browser.</div>

<div><br></div><div>If this is a terrible idea let me know, otherwise I&#39;ll consider this solved. </div></div><div class=""><div class="h5"><div class="gmail_extra"><br><br><div class="gmail_quote">On Sat, Apr 27, 2013 at 9:56 AM, Matthew Butterick <span dir="ltr">&lt;<a href="mailto:mb.list.acct@gmail.com" target="_blank">mb.list.acct@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">I&#39;m building a website using Scribble as the source format. As a development tool, I&#39;ve built a web server in Python that lets me view all my Scribble source files and look at them in different states of processing. To view the results of the Scribble files, the Python server just sends the files to Racket via a system command (os.Popen) and reads the result. This works but it&#39;s slow, because it  has to launch a new Racket thread for every request.<div>


<br></div><div>I thought I could speed things up by rewriting the development web server in Racket. But having tried a few approaches, I&#39;m not sure how to duplicate this functionality within a Racket web servlet: </div>


<div><br></div><div><b>(require &lt;modulename&gt;) </b></div><div>This only gets evaluated once, when the server is started. That doesn&#39;t help, since the &lt;filename&gt; is going to be passed in as a parameter while the server is running.</div>


<div><br></div><div><div><b>(dynamic-require &lt;</b><b> modulename </b><b>&gt;) </b></div></div><div>This gets evaluated only when invoked, and thus can take &lt;modulename&gt; as a parameter, but then &lt;filename&gt; can&#39;t be reloaded (this is essential, as the point of the system is to be able to edit the files and see the changes in the web browser immediately)</div>


<div><br></div><div><b>(enter! &lt;modulename&gt;)</b></div><div>This reloads the file, but it&#39;s not clear how to get access to names provided by &lt;modulename&gt;. (The documentation for enter! suggests that this is not how it&#39;s meant to be used anyhow.)</div>


<div><br></div><div>Obviously, I could call a new instance of Racket as a system command, but that wouldn&#39;t offer any advantage over the current approach.</div><div><br></div><div><br></div><div>
I suppose what I&#39;m looking for is an equivalent of the Python reload(&lt;modulename&gt;) command.<span><font color="#888888"><br></font></span></div><span><font color="#888888"><div><br>
</div><div><br></div><div>Matthew Butterick<br></div></font></span></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div></div>