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.