卡皮斯特拉诺讨厌Gemspecs

时间:2009-11-30 19:04:42

标签: build capistrano gem

我正在使用Capistrano在Slicehost上部署rails应用程序。部署过程的一部分涉及重建gem并安装它。

通过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

这很奇怪,因为当我进入盒子并手动完成时,同样的命令可以正常工作,当我这样做时......

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

这是capistrano包装远程命令行调用的方式,当我手动执行时也能正常工作。

甚至尝试在另一个ruby文件中调用Kernel.system()并从deploy.rb调用它,但仍然遇到同样的问题。疯狂。

想知道它是否与

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

以明显随机的间隔添加到输出中的字符串。

1 个答案:

答案 0 :(得分:0)

“工作正常”可能并不完全正确,你确定它不会输出STDERR吗?

out :: IP addr的东西有点奇怪,不正常;你还应该考虑你的PATH是否设置正确,这是PTY和TTY之间的区别。

最简单的方法(但不完美)是:

run('echo $PATH')

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

(后者就是Cap,实际上是。)

您可能还想尝试:

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

^其中一个适合你。