Add command argument string splitting

launchd uses exec() under the hood when you specify ProgramArguments
or Program so you must break apart program arguments into separate
strings in an array or the command will fail
This commit is contained in:
Aaron Kalin committed 2012-09-10 19:10:47 -05:00
1 parent c617ddb3b2
commit 698e6ae092
4 files changed
+42 -1

No files matched your search

+3 -1
View File
@@ -13,7 +13,9 @@
</dict> </dict>
<key>ProgramArguments</key> <key>ProgramArguments</key>
<array> <array>
<string><%= process.command %></string> <%- command_args.each do |command| -%>
<string><%= command %></string>
<%- end -%>
</array> </array>
<key>KeepAlive</key> <key>KeepAlive</key>
<true/> <true/>
+1
View File
@@ -8,6 +8,7 @@ class Foreman::Export::Launchd < Foreman::Export::Base
engine.each_process do |name, process| engine.each_process do |name, process|
1.upto(engine.formation[name]) do |num| 1.upto(engine.formation[name]) do |num|
port = engine.port_for(process, num) port = engine.port_for(process, num)
command_args = process.command.split(" ")
write_template "launchd/launchd.plist.erb", "#{app}-#{name}-#{num}.plist", binding write_template "launchd/launchd.plist.erb", "#{app}-#{name}-#{num}.plist", binding
end end
end end
+10
View File
@@ -18,4 +18,14 @@ describe Foreman::Export::Launchd, :fakefs do
File.read("/tmp/init/app-bravo-1.plist").should == example_export_file("launchd/launchd-b.default") File.read("/tmp/init/app-bravo-1.plist").should == example_export_file("launchd/launchd-b.default")
end end
context "with multiple command arguments" do
let(:procfile) { FileUtils.mkdir_p("/tmp/app"); write_procfile("/tmp/app/Procfile", "charlie") }
it "splits each command argument" do
launchd.export
File.read("/tmp/init/app-alpha-1.plist").should == example_export_file("launchd/launchd-c.default")
end
end
end end
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>app-alpha-1</string>
<key>EnvironmentVariables</key>
<dict>
<key>PORT</key>
<string>5000</string>
</dict>
<key>ProgramArguments</key>
<array>
<string>./alpha</string>
<string>charlie</string>
</array>
<key>KeepAlive</key>
<true/>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/var/log/app/app-alpha-1.log</string>
<key>UserName</key>
<string>app</string>
<key>WorkingDirectory</key>
<string>/tmp/app</string>
</dict>
</plist>