For the record, I know I can pass an absolute path (defined with
define-runtime-path) to load-initial-data.  My question is more about
"why is this different between the shell and Dr Racket?"

On Thu, Jan 19, 2017 at 5:23 PM, David Storrs <[email protected]> wrote:
> define-runtime-path is based on the enclosing file, not the running file.
>
>
>
> ;; file:  app/lib/db/initial_test_data.sql
> ...various SQL commands...
>
>
> ;; file:  app/lib/t/testing_utils.rkt
> (define-runtime-path thisdir ".")
> (define cmd (string-append "psql -d biomantica < "
>                              (path->string (build-path thisdir where))))
>   (say "shelling out in order to load initial data into DB. Command
> is: \n\t" cmd)
>   (system cmd)
> )
>
>
> ;;  file:  app/test_1.rkt
> (require "lib/t/testing_utils.rkt")
> (load-initial-data "lib/db/initial_test_data.sql")
>
>
> ;;  file:  app/lib/db/test_2.rkt
> (require "../t/testing_utils.rkt")
> (load-initial-data "./initial_test_data.sql")
>
>
> $ ./test_1.rkt
> shelling out in order to load initial data into DB. Command is:
>     psql -d biomantica < ./lib/db/initial_test_data.sql
> INSERT 0 0
> ...lots of other SQL results...
>
> $  ./lib/db/test_2.rkt
> shelling out in order to load initial data into DB. Command is:
>     psql -d biomantica < ././initial_test_data.sql
> /bin/sh: ././initial_test_data.sql: No such file or directory
> #f
>
>
> Note that both test_N.rkt files worked when I used the prior version.
>
> On Thu, Jan 19, 2017 at 12:52 PM, Robby Findler
> <[email protected]> wrote:
>> define-runtime-path is designed for this problem, IIUC. Let me know if
>> the docs don't help.
>>
>> Robby
>>
>> On Thu, Jan 19, 2017 at 11:47 AM, David Storrs <[email protected]> 
>> wrote:
>>> Short form:  When using Dr Racket, how do I write something that says
>>> "Here is a path to a file that I care about.  The path is relative to
>>> you, the script that is running the code" ?
>>>
>>> Long form:
>>>
>>> I have a file, testing_utils.rkt, that includes the following snippet of 
>>> code:
>>>
>>> (define (load-initial-data where)
>>>   (define cmd (string-append "psql -d biomantica < "
>>>                              (path->string
>>>                               (path-only
>>>                                (path->complete-path
>>>                                 (find-system-path 'run-file))))
>>>                              where))
>>>   (say "shelling out in order to load initial data into DB. Command
>>> is: \n\t" cmd)
>>>
>>>   (void
>>>    (with-output-to-string  ;; silence the output
>>>      (thunk
>>>       (system cmd)))))
>>>
>>>
>>> The way this gets used is that one of our test scripts (e.g.
>>> 'endpoints.t') will (require "path/to/testing_utils.rkt") and then
>>> call the load-initial-data function as follows:
>>>
>>> (load-initial-data "../initial_test_data.sql")
>>>
>>> I operate in Emacs via the shell, while my cofounder James uses Dr
>>> Racket.  The above sequence works for me but not for him.  When I run
>>> endpoints.t it locates the endpoints.t file, generates the path from
>>> there to the initial_test_data.sql file, and shells out to run that
>>> SQL through psql in order to load the database for testing.  When
>>> James tries it it fails.
>>>
>>> The failure seems to be that for me "the running script" is the
>>> endpoints.t file, while for him it's the Dr Racket executable.  I'm
>>> not sure where to even begin sorting this out, so I was hoping for
>>> some help.
>>>
>>> Any thoughts?
>>>
>>> Dave
>>>
>>>
>>> PS:  James had to step out for something else or he would be sending
>>> this himself.
>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups 
>>> "Racket Users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>> email to [email protected].
>>> For more options, visit https://groups.google.com/d/optout.
>>
>> --
>> You received this message because you are subscribed to the Google Groups 
>> "Racket Users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to