[erlang-questions] relx extended deps

e@REDACTED e@REDACTED
Tue Jan 27 02:15:53 CET 2015


Hi, all.
in order to solve the ranch's problem with ssl during shutdown
(https://github.com/ninenines/ranch/issues/90)

I have created the following fix to relx
(do not laugh, it is strongly related to the issue)
http://file.bestmx.net/ee/software/relx-extended-deps/

it is a proof-of-concept module, which solves the problem in isolation 
of relx.
INPUT IS:
a concatenation of multiple .app.src files (that represent a 
hypothetical release with its deps)
OUTPUT IS:
a linear sequence of applications that satisfies each and every 
individual dep described in the given input.
(OR crash if the given deps contain a loop.)

this tiny module assumes one elegant extension to the .app.src syntax:
the option 'sequence'

adding this option to _your_ .app.src you can instruct relx to arrange 
some of your deps to an arbitrary position in the startup sequence 
(anywhere between deps of deps of deps).

for example:
{application, my_app, [
	{applications, [
		kernel,
		stdlib,
		cowboy,
		ssl
	]},
	{sequence, [[ssl,ranch]]}	
]}.

instructs my dependency resolver to start ssl BEFORE ranch, regardless 
any other circumstances.

{'sequence', Sequences}

Sequences = [ Seq ]
Seq = [ atom() ]

A Seq is a requirement to run some (two or more) application in the 
given order. You may specify multiple independent Seqs.


 From the relx's perspective sequence is not a dep, it actually reads: 
IF the app A will be started as a dep of any other app in our deps-tree 
THEN it should be started before the app B.

Thus, if relx developers accept this fix, then you shall add:
"{sequence, [[ssl,ranch]]}"
to the ranch's .app file and the proper sequence will be ensured,
BUT ranch will not have a redundant dependency.



More information about the erlang-questions mailing list