2

I have a number of D language programs (.d extension) and a compile-and-run tool (rdmd)--I'd like to configure Apache (version 2.2) to handle URLs such as "mysite.com/d/hello.d" by running rdmd with the requested resource. The programs do output valid HTTP headers.

I've researched AddHandler and Action, but have been unsuccessful in getting them to do what I want, namely executing rdmd with the resource. I suspect that the problem is that rdmd needs to be in some special cgi directory.

Can someone walk through the steps necessary to configure Apache on a Debian based system, such that it executes my files instead of offering them up for download? Directory specific ('/d') or site-wide execution are both fine.

1 Answer 1

1

The D files should be treated as CGI programs. Add a CGI handler for the .d extension and enable the ExecCGI option. For example:

<Directory /var/www/public_html>
    Options +ExecCGI
    AddHandler cgi-script .d
</Directory>

Of course you need to change the directory path to match your setup.

Also, be sure to check the permissions settings of the .d files. The server doesn't run the files as your user account, so they need to be executable by everyone. Running this on the command line in the folder with your D programs should do it:

chmod a+x *.d

Because the files are now executable, they will be run using the program listed in the shebang line of each script. This is where rdmd comes in. The first line in each file should be something similar to this:

#!/usr/bin/rdmd

I don't know the specifics for the D language. Be sure and use the path to your rdmd compiler. If your not sure run this on the command line:

which rdmd

That should tell you where it is.

1
  • Ah, so the key is to make the resources themselves executable. Thanks.
    – Justin W
    Commented Mar 22, 2011 at 22:51

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.