2017-04-26 44 views
0

作爲部署到服務器的Capistrano Ruby任務的一部分,我希望它輸出Git消息並提交剛剛部署的代碼。Capistrano/Ruby執行在變量後添加分號

有了這個:

git_message = `git log -1 HEAD --pretty=format:%s` 
git_commit = `git rev-parse HEAD` 
git_commit = "https://example.com/myorg/myrepo/commit/" + git_commit 

execute "echo \"Deployed \\\"#{git_message}\\\": #{git_commit}\" | a_command_that_posts_to_slack" 

它的輸出是這樣的:

Deployed "Merge branch 'feature/some-feature' into develop": https://example.com/myorg/myrepo/commit/0fdfa09fbfe012649fb0a998aa2e99cb5fd7c8b3; 

注意分號提交哈希的盡頭。我已經使用puts確認git_commit不以分號結尾,而git_message沒有分號,並且在它之後也沒有。

什麼是添加分號,我該如何刪除它?

+0

當你說它的輸出,你的意思是鬆弛?我看到你有'a_command_that_posts_to_slack'或許這個命令添加了分號?嘗試重定向到一個文件,而不是滾動到該命令。 – ddubs

+0

我在Slack中看到了分號,但我也在終端中看到它。在沒有管道的情況下出現相同的分號:'execute「echo \」Deployed \\「#{git_message} \\\」:#{git_commit} \「」' – Hugo

回答

1

這是因爲你在你的命換行,這Capistrano是使用轉化爲分號,想着要執行多個命令(每行一個)。

Ruby中的反引用捕獲整個過程的標準輸出,包括尾隨的換行符。使用chomp刪除它們。

git_message = `git log -1 HEAD --pretty=format:%s`.chomp 
git_commit = `git rev-parse HEAD`.chomp 
git_commit = "https://example.com/myorg/myrepo/commit/" + git_commit 

execute "echo \"Deployed \\\"#{git_message}\\\": #{git_commit}\" | a_command_that_posts_to_slack"