2009-11-30 22 views
0

我正在使用Capistrano在Slicehost上部署Rails應用程序。部署過程的一部分涉及重建寶石並安裝它。Capistrano Hates Gemspecs

通過的git SCM的代碼部署到服務器工作正常,但由於某些原因,當我嘗試做一個...

run 'gem build /my/app/folder/my.gemspec' 

...在一個單獨的任務deploy.rb,這一切去bboom。我得到一個奇怪的錯誤告訴我,在gemspec文件不是文件...

ERROR: While executing gem ... (Gem::InvalidSpecificationException) 
[ ... , "public/images/admin/navigation_shadow.png", "public/images/admin/new_layout.png", "public/images/admin/buttons_background.png", "public/images/admin/expand.png", "public/images/admin/status_spinner 
** [out :: MY.IP.ADD.RESS ] .gif", "public/images/admin/draft_page.png", "public/images/admin/vertical_tan_gradient.png", "public/images/admin/status_top_right.png", "public/images/admin/snippet.png", "public/images/admin/spacer.gif", "public/images/admin/status_bottom_right.png", "public/images/admin/spinner.gif", "CONTRIBUTORS", "script", "script/server", "script/breakpointer", "script/generate", "script/dbconsole", "script/about", "script/spec", "script/runner", "script/process", "script/process/reaper", "script/process/inspector", "script/process/spinner", "script/process/spawner", "script/version", "script/plugin", "script/console", "script/autospec", "script/destroy", "script/cucumber", "script/spec_server", "script/performance", "script/performance/profiler", "s ** [out :: MY.IP.ADD.RESS ] cript/performance/request", "script/performance/benchmarker", "script/extension", "LICENSE", "CHANGELOG", ".gitignore", "bin", "my.gemspec", "config", "config/database.mysql.yml", "config/environments", "config/environments/test.rb", "config/environments/production.rb", "config/environments/development.rb", "config/database.yml" ] are not files 

這是奇怪,因爲同樣的命令完美的作品時,我ssh到盒子,做手工,當我做....

sh -c 'gem build /my/app/folder/my.gemspec' 

這是如何capistrano包裝遠程命令行調用,工作正常,當我手動做。

即使嘗試在另一個ruby文件的Kernel.system()調用中打包並從deploy.rb調用它,但仍然遇到同樣的問題。瘋。

不知道如果它的東西與

** [out :: MY.IP.A.DRES] 

字符串這就是做被添加到輸出的顯然隨機時間間隔。

回答

0

「它工作正常」可能不完全正確,您確定它不輸出STDERR嗎? out :: IP addr的東西有點奇怪,不正常;您還應該考慮您的PATH是否設置正確,這是PTY和TTY之間的差異。

做到這一點(但並不完美)的easisest方法是:

run('echo $PATH') 

ssh my.server.addr 'sh -c \'echo $PATH\'' 

(後者是什麼帽子,實際上沒有。)

您可能也想試試:

run("cd /my/app/folder/ && gem build my.gemspec") 

^其中之一將爲你工作。