[racket] Scriblogify Error -- I'm baaack!
It works for Scriblogify as well as Scribble. Thanks, Matthew.
On Sat, Oct 27, 2012 at 11:15 PM, Matthew Flatt <mflatt at cs.utah.edu> wrote:
> You're running into sandbox filesystem-protection rules.
>
> When you include a path in #:requires for `make-evaluator', then read
> access is granted for that file in the sandbox, so that's why the extra
> #:require path changes the document's behavior.
>
> Outside of DrRacket... well, I'm not excatly sure. Something in
> DrRacket's configuration of various path and module parameters enables
> access to the directory containing "my-scribble-doc.scrbl", while the
> configuration of raw `racket', `scribble', or `raco scribblogify'
> doesn't allow access to the directory.
>
> Assuming that you trust the code that you run in documentation --- at
> least as much as you trust the document itself --- the best approach is
> probably to use `call-with-trusted-sandbox-configuration':
>
> @(interaction
> #:eval (call-with-trusted-sandbox-configuration
> (lambda ()
> (make-evaluator
> 'racket/base
> (sandbox-output 'string)
> (sandbox-error-output 'string)
> #:requires '("../Private/my-racket-mod.rkt"))))
> (f 1 2))
>
> I didn't actually try that with `raco scribblogify', but I got the
> errors that you report when using `raco scribble', and using
> `call-with-trusted-sandbox-configuration' solves the problem with `raco
> scribble'.
>
> At Fri, 26 Oct 2012 22:38:25 -0400, Patrick King wrote:
> > When last I wrote on my problems with Scriblogify, I attributed them to
> > Windows 7 security... I was way too optimistic, and way too ashamed to
> > bother the community again. I have found a couple smoking guns since
> then,
> > and found that they, too, had nothing to do with my problem. The
> following
> > is repeatable in Racket 5.3 and Windows 7:
> >
> > The following are all part of a project "ScriblogifyBug", which contains
> > folders "Private", where I hide implementation details, and "Blog",
> where I
> > boast about my implementation. Like a good little programmer, I use
> > rackunit to create custom tests relevant to my code, and use submodules
> to
> > implement tests. Like an enthusiastic Racketeer, I blog via
> > Scribble and Scriblogify.
> >
> > #lang racket/base
> > ;; begin Private/my-test-mod.rkt
> > (require rackunit)
> > (provide (all-defined-out)
> > (all-from-out rackunit))
> >
> > (define-simple-check
> > (check-my-func f)
> > (procedure? f))
> > ;; end Private/my-test-mod.rkt
> >
> > #lang racket/base
> > ;; begin Private/my-racket-mod.rkt
> > (provide f)
> >
> > (module+ test
> > (require "my-test-mod.rkt"))
> >
> > (define (f x y)
> > (+ x y))
> >
> > (module+ test
> > (printf "Tests running.~n")
> > (check-eq? 1 1)
> > (check-my-func f))
> > ;; end Private/my-racket-mod.rkt
> >
> > #lang scribble/manual
> > @; begin Blog/my-scribble-doc.scrbl
> > @(require racket/sandbox scribble/eval)
> > @title{Trapping the Scriblogify Bug}
> > @author{Pat}
> >
> > I expect this file to render fine via the @italic{Scribble HTML} button
> > within DrRacket,
> > and it does. However, I am curious why I must explicitly require
> > "my-test-mod.rkt", which
> > is only called from within the test submodule of "my-racket-mod.rkt".
> >
> > Let's demonstate my nifty new function, @racket[f].
> >
> > @(interaction #:eval(make-evaluator 'racket/base
> > (sandbox-output 'string)
> > (sandbox-error-output 'string)
> > #:requires
> > '("../Private/my-racket-mod.rkt"
> >
> > "../Private/my-test-mod.rkt"))
> > ;
> ^^^^^^^^^^^^^^^^^^^^^^^^^^
> > ; Why must I explicitly
> require
> > this?
> > (f 1 2))
> >
> >
> > I also expect this file to fail to render via @italic{raco scriblogify
> > "my-scribble-doc.scrbl"},
> > and it does, yielding the error
> > @italic{"current-directory: `exists' access denied for
> > ~\ScriblogifyBug\Blog\"}. With different
> > tweaks, I've gotten
> > similar 'exists' errors for the files in ../Private, involving
> > current-directory or similar
> > functions described in @bold{14.2 Filesystem} in the documentation, so I
> > suspect a Windows
> > specific path quirk. For instance, if I put all three files in the same
> > directory (modifying
> > the @racket{require}s in "my-scribble-doc.scrbl" accordingly), I get the
> > error
> > @italic{"file-exists?: `exists' access denied for C:\Program
> > Files\Racket\.\racket.exe"}. I
> > am not sure how to interpret "\.\", and C:\Program Files\Racket certainly
> > exists on my system,
> > as does C:\Program Files\Racket\Racket.exe (so there's the path issue and
> > the case issue).
> > @; end Blog/my-scribble-doc.scrbl
> >
> > So, in summary, two issues:
> >
> > a) Scribble needs help finding and interpreting files found within
> > submodules that I would expect to be both findable and irrelevant. When
> > explicitly told every potentially relevant file, it can figure out that
> it
> > can ignore it, when rendered within DrRacket.
> >
> > 2) Scriblogify doesn't find the help sufficient, when run from the
> command
> > line.
> >
> > c) One common clue, various path related errors that might be Windows
> > Weirdness.
> >
> > Ok, me sticking with Windows is an issue, one that I hope to rectify in
> the
> > next six months as certain work-related constraints are relaxed.
> >
> > All thoughts appreciated.
> >
> > Pat
> > ____________________
> > Racket Users list:
> > http://lists.racket-lang.org/users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20121102/c594e824/attachment-0001.html>