[erlang-questions] Yaws, ErlyWeb and Windows.

Robert Raschke <>
Tue Sep 11 11:35:56 CEST 2007


> Bob Cowdery wrote:
>> Hi All
>> 
>> Can someone give me the picture on Yaws and ErlyWeb under Windows please
> 
> I'm sorry about that - to my knowledge there is quite a lot
> of people running yaws under windows. I don't run windows at
> all any longer - and I'll just have to leave it up to the
> yaws/windows community to write e.g. a proper wiki entry on how to do 
> it. I know for sure that it atleast used to work - I made sure it
> worked once, but it might have gone bad.

Here's how I build yaws on Windows:

My source root is $ROOT.
Unpack yaws-1.68 into $ROOT/lib/yaws.
Have a folder called $ROOT/extra with the files yaws_generated.erl and
yaws.app (although I forget why I need yaws.app):

yaws_generated.erl:
%%%----------------------------------------------------------------------
%%% File    : yaws_generated.template
%%% Author  : Klacke <>
%%% Purpose : 
%%% Created : 10 Jun 2002 by Klacke <>
%%%----------------------------------------------------------------------

%% generated code from some environment variables
%% especially VARDIR is important since it controls
%% where the --hup and friends

-module(yaws_generated).
-author('').

-compile(export_all).

version() -> "1.68".

vardir() ->  "C:/yaws/var".

ctldir() -> "C:/yaws/var/run/yaws".

etcdir() -> "C:/yaws/etc".
	  
% (Or whatever you want your defaults to be.)

yaws.app:
{application, yaws, [
	{description, "yaws WWW server"},
	{vsn, "1.68"},
	{modules, [
		yaws,
		yaws_app,
		yaws_ticker,
		yaws_config,
		yaws_server,
		yaws_sup,
		yaws_api,
		yaws_log,
		yaws_ls,
		yaws_debug,
		yaws_compile,
		yaws_ctl,
		yaws_cgi,
		yaws_zlib,
		yaws_generated,
		mime_type_c,
		mime_types,
		yaws_session_server,
		yaws_404,
		yaws_revproxy,
		yaws_html,
		yaws_log_file_h,
		yaws_rss,
		yaws_dav,
		yaws_pam,
		json,
		jsonrpc,
		yaws_jsonrpc,
		yaws_xmlrpc,
		haxe,
		yaws_rpc,
		yaws_soap_srv,
		yaws_soap_lib
	]},
	{registered, []},
	{mod, {yaws_app, []}},
	{env, []},
	{applications, [
		kernel,
		stdlib
	]}
]}.

And then I run this batch script:

build_yaws.bat:
@echo off
setlocal

copy /Y extra\yaws_generated.erl lib\yaws\src
cd lib\yaws\src

set ERLC="C:\Program Files\erl5.5.4\bin\erlc"
set ERL="C:\Program Files\erl5.5.4\bin\erl"

set ERLCOPTS=-W -pa .. -I../include -o ../ebin
set ERLOPTS=-noshell  -pa ../ebin


%ERLC% %ERLCOPTS% yaws.erl
%ERLC% %ERLCOPTS% yaws_app.erl
%ERLC% %ERLCOPTS% yaws_ticker.erl
%ERLC% %ERLCOPTS% yaws_config.erl
%ERLC% %ERLCOPTS% yaws_server.erl
%ERLC% %ERLCOPTS% yaws_sup.erl
%ERLC% %ERLCOPTS% yaws_api.erl
%ERLC% %ERLCOPTS% yaws_log.erl
%ERLC% %ERLCOPTS% yaws_ls.erl
%ERLC% %ERLCOPTS% yaws_debug.erl
%ERLC% %ERLCOPTS% yaws_compile.erl
%ERLC% %ERLCOPTS% yaws_ctl.erl
%ERLC% %ERLCOPTS% yaws_cgi.erl
%ERLC% %ERLCOPTS% yaws_zlib.erl
%ERLC% %ERLCOPTS% yaws_generated.erl
%ERLC% %ERLCOPTS% yaws_session_server.erl
%ERLC% %ERLCOPTS% yaws_404.erl
%ERLC% %ERLCOPTS% yaws_revproxy.erl
%ERLC% %ERLCOPTS% yaws_html.erl
%ERLC% %ERLCOPTS% yaws_log_file_h.erl
%ERLC% %ERLCOPTS% yaws_rss.erl
%ERLC% %ERLCOPTS% yaws_dav.erl
%ERLC% %ERLCOPTS% yaws_pam.erl
%ERLC% %ERLCOPTS% json.erl
%ERLC% %ERLCOPTS% jsonrpc.erl
%ERLC% %ERLCOPTS% yaws_jsonrpc.erl
%ERLC% %ERLCOPTS% yaws_xmlrpc.erl
%ERLC% %ERLCOPTS% haxe.erl
%ERLC% %ERLCOPTS% yaws_rpc.erl
%ERLC% %ERLCOPTS% yaws_soap_srv.erl
%ERLC% %ERLCOPTS% yaws_soap_lib.erl

del /F charset.def
echo. > charset.def

%ERLC% %ERLCOPTS% mime_type_c.erl
%ERL% %ERLOPTS% -s mime_type_c compile
%ERLC% %ERLCOPTS% mime_types.erl

pause
endlocal


I have also made a small attempt at writing a yaws.bat file, but I
haven't used this in a few years:

@echo off
setlocal

set HOME=C:/yaws
set yawsdir=C:/yaws/erlang/yaws-1.68

set erl=C:\Program Files\erl5.5.4\bin\erl.exe
set werl=C:\Program Files\erl5.5.4\bin\werl.exe

set debug=
set daemon=
set interactive=
set trace=
set conf=
set runmod=
set sname=
set heart=
set xpath=
set mnesia=
set id=default
set pdist=
set erlarg=

:NEXTARG
set arg=%1
shift
if "%arg%"=="" goto ENDARGS

if "%arg%"=="-i" goto INTERACT
if "%arg%"=="--interactive" goto INTERACT

if "%arg%"=="-w" goto WINTERACT
if "%arg%"=="--winteractive" goto WINTERACT

if "%arg%"=="-D" goto DAEMON
if "%arg%"=="--daemon" goto DAEMON

if "%arg%"=="-d" goto DEBUG
if "%arg%"=="--debug" goto DEBUG

if "%arg%"=="-t" goto TRACETR
if "%arg%"=="--tracetraf" goto TRACETR

if "%arg%"=="-T" goto TRACEHT
if "%arg%"=="--tracehttp" goto TRACEHT

if "%arg%"=="-I" goto ID
if "%arg%"=="--id" goto ID

if "%arg%"=="-x" goto TRACEOUT
if "%arg%"=="--traceout" goto TRACEOUT

if "%arg%"=="--trace" goto TRACE

if "%arg%"=="-M" goto MNESIADIR
if "%arg%"=="--mnesiadir" goto MNESIADIR

if "%arg%"=="-c" goto CONF
if "%arg%"=="--conf" goto CONF

if "%arg%"=="-pa" goto PA
if "%arg%"=="--pa" goto PA

if "%arg%"=="-r" goto RUNMOD
if "%arg%"=="--runmod" goto RUNMOD

if "%arg%"=="-h" goto HUP
if "%arg%"=="--hup" goto HUP

if "%arg%"=="-s" goto STOP
if "%arg%"=="--stop" goto STOP

if "%arg%"=="-ls" goto LS
if "%arg%"=="--ls" goto LS

if "%arg%"=="-S" goto STATUS
if "%arg%"=="--status" goto STATUS

if "%arg%"=="-load" goto LOAD
if "%arg%"=="--load" goto LOAD

if "%arg%"=="-j" goto CTLTRACE
if "%arg%"=="--ctltrace" goto CTLTRACE

if "%arg%"=="-v" goto VERSION
if "%arg%"=="--version" goto VERSION

if "%arg%"=="-sname" goto SNAME
if "%arg%"=="--sname" goto SNAME

if "%arg%"=="-name" goto NAME
if "%arg%"=="--name" goto NAME

if "%arg%"=="-heart" goto HEART
if "%arg%"=="--heart" goto HEART

if "%arg%"=="-proto_dist" goto PROTO
if "%arg%"=="--proto_dist" goto PROTO

if "%arg%"=="-erlarg" goto ERLARG
if "%arg%"=="--erlarg" goto ERLARG

if "%arg%"=="-check" goto CHECK
if "%arg%"=="--check" goto CHECK

goto HELP

:INTERACT
set interactive=true
set debug= -yaws debug 
set daemon=
goto NEXTARG

:WINTERACT
set interactive=true
set debug= -yaws debug 
set daemon=
set erl=%werl%
goto NEXTARG

:DAEMON
set daemon= -detached 
goto NEXTARG

:DEBUG
set debug= -boot start_sasl -yaws debug 
goto NEXTARG

:TRACETR
set trace= -yaws trace traffic 
goto NEXTARG

:TRACEHT
set trace= -yaws trace http 
goto NEXTARG

:ID
set id=%1
shift
goto NEXTARG

:TRACEOUT
set traceoutput= -yaws traceoutput 
goto NEXTARG

:TRACE
set traceoutput= -yaws traceoutput 
set trace= -yaws trace traffic 
goto NEXTARG

:MNESIADIR
set mnesia= -mnesia dir %1 -run mnesia start
shift
goto NEXTARG

:CONF
set conf= -conf %1 
shift
goto NEXTARG

:PA
set xpath= %xpath% -pa %1 
shift
goto NEXTARG

:RUNMOD
set runmod= -runmod %1 
shift
goto NEXTARG

:HUP
set ex="%erl%" -noshell -pa "%yawsdir%/ebin" -s yaws_ctl hup 
goto NEXTARG

:STOP
set ex="%erl%" -noshell -pa "%yawsdir%/ebin" -s yaws_ctl stop 
goto NEXTARG

:LS
set ex="%erl%" -noshell -pa "%yawsdir%/ebin" -s yaws_ctl ls 
goto NEXTARG

:STATUS
set ex="%erl%" -noshell -pa "%yawsdir%/ebin" -s yaws_ctl status 
goto NEXTARG

:LOAD
"%erl%" -noshell -pa "%yawsdir%/ebin" -s yaws_ctl load %id% %1 %2 %3 %4 %5 %6 %7 %8 %9
goto END

:CTLTRACE
set ex="%erl%" -noshell -pa "%yawsdir%/ebin" -s yaws_ctl trace %1 
shift
goto NEXTARG

:VERSION
"%erl%" -noshell -pa "%yawsdir%/ebin" -s yaws printversion
goto END

:SNAME
set sname= -sname %1 
shift
goto NEXTARG

:NAME
set sname= -name %1 
shift
goto NEXTARG

:HEART
set heart= -heart 
goto NEXTARG

:PROTO
set pdist= -proto_dist %1 
shift
goto NEXTARG

:ERLARG
set erlarg=%erlarg% %1 
shift
goto NEXTARG

:CHECK
mkdir "%HOME%/.yaws/"
mkdir "%HOME%/.yaws/%id%"
"%erl%" -noshell -pa "%yawsdir%/ebin" %xpath% -s yaws_ctl check %id% %1 %2 %3 %4 %5 %6 %7 %8 %9
goto END

:ENDARGS

if NOT DEFINED ex goto NOEX
%ex% %id%
goto END
:NOEX

if "%id%"=="" goto NOID
set id=-yaws id %id%
:NOID

set trace=%trace% %traceoutput%

if "%daemon%%interactive%"=="" goto HELP

set XEC=%daemon% %heart% -pa "%yawsdir%/ebin" %xpath% %sname% %pdist% %erlarg% %debug% -s yaws %trace% %conf% %runmod% %mnesia% %id%

set HEART_COMMAND=
if "%heart%%daemon%"=="" goto NOHEART
echo set HEART_COMMAND="%erl%" %XEC%
set HEART_COMMAND="%erl%" %XEC%

:NOHEART
echo "%erl%" %XEC%
"%erl%" %XEC%
goto END

:HELP
echo "usage:  "
echo ""

echo "       yaws -i | --interactive         -- interactive (no daemon) mode"
echo "       yaws -w | --winteractive        -- interactive (werl) "
echo "       yaws --daemon                   -- daemon mode"

echo ""

echo ""
echo "       Auxilliary flags for the daemon: "
echo "            --id Id          --  Set system id"
echo "            --debug          --  debug mode "
echo "            --conf File      --  set config file"
echo "            --tracetraf      --  trace traffic"
echo "            --tracehttp      --  trace http traffic"
echo "            --traceout       --  trace output to stdout"
echo "            --version        --  print version"
echo "            --pa path        --  add load path"
echo "            --mnesiadir dir  --  start Mnesia in dir"
echo "            --proto_dist Mod     --  use Mod for distrib"
echo "            --sname xxx      --  start with sname xxx"
echo "            --name xxx       --  start with name xxx"
echo "            --runmod mod     --  call mod:start/0 at startup"
echo "            --heart          --  auto restart yaws if it crashes"
echo "            --erlarg X       --  pass argument X to $erl"

echo ""

echo "ctl functions ... "
echo "        yaws --hup [--id ID]       -- hup the daemon, reload conf"
echo "        yaws --stop [--id ID]     -- stop the daemon"
echo "        yaws --status [--id ID]    -- query the daemon status"
echo "        yaws --load Modules        -- load modules"
echo "        yaws --ls                  -- list Yaws nodes and their status"
echo "        yaws --ctltrace traffic|http    -- toggle trace of running daemon"
echo "        yaws --check YawsFile [IncDirs] -- test compile File"

:END
endlocal



Robby

--
r fullstop raschke around tombob fullstop com





More information about the erlang-questions mailing list