标签: capistrano

如何检查Capistrano中是否存在文件(在远程服务器上)?

像我在Googleverse中看到的许多其他人一样,我成了File.exists?陷阱的受害者,陷阱当然会检查您的本地文件系统,而不是您正在部署的服务器.

我找到了一个使用shell hack的结果:

if [[ -d #{shared_path}/images ]]; then ...
Run Code Online (Sandbox Code Playgroud)

但这并不适合我,除非它在Ruby方法中很好地包装.

谁有人优雅地解决了这个问题?

ruby capistrano file exists

41
推荐指数
4
解决办法
2万
查看次数

为什么限制部署会给出Permission denied(publickey)?

好吧,我对某些事感到困惑......我能够提交到我的github存储库就好了,但当我尝试cap deploy从我的本地文件夹到我的登台服务器时,我得到了Permission denied (publickey).

如果我跑,ssh git@github.com我实际上得到一个错误PTY allocation request failed on channel 0

所以这里有些错误.

如果我跑,ssh -vT git@github.com我得到:

OpenSSH_5.6p1, OpenSSL 0.9.8r 8 Feb 2011
debug1: Reading configuration data /Users/myuser/.ssh/config
debug1: Reading configuration data /etc/ssh_config
debug1: Applying options for *
debug1: Connecting to github.com [207.97.227.239] port 22.
debug1: Connection established.
debug1: identity file /Users/myuser/.ssh/id_rsa type 1
debug1: identity file /Users/myuser/.ssh/id_rsa-cert type -1
debug1: identity file /Users/myuser/.ssh/id_dsa type -1
debug1: identity file /Users/myuser/.ssh/id_dsa-cert type -1
debug1: …
Run Code Online (Sandbox Code Playgroud)

git ssh capistrano ssh-keys public-key

40
推荐指数
3
解决办法
3万
查看次数

请在Capistrano配方(LoadError)中要求此文件

我正在使用Capistrano 2和Rails 3项目.最近我重新创建了我的gemset表格,现在当我尝试运行rails服务器时,我收到错误"请在Capistrano配方(LoadError)中请求此文件".

详细错误消息:

/Users/leonidlukin/.rvm/rubies/ruby-1.9.3-p429/bin/ruby -e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift) /Users/leonidlukin/Sites/moscowshows/script/rails server -b 0.0.0.0 -p 3000 -e development
/Users/leonidlukin/.rvm/gems/ruby-1.9.3-p429@moscowshows/gems/capistrano-2.15.5/lib/capistrano/configuration/loading.rb:18:in `instance': Please require this file from within a Capistrano recipe (LoadError)
    from /Users/leonidlukin/.rvm/gems/ruby-1.9.3-p429@moscowshows/gems/rvm-capistrano-1.5.6/lib/rvm/capistrano/helpers/base.rb:16:in `rvm_with_capistrano'
    from /Users/leonidlukin/.rvm/gems/ruby-1.9.3-p429@moscowshows/gems/rvm-capistrano-1.5.6/lib/rvm/capistrano/helpers/_cset.rb:3:in `<top (required)>'
    from /Users/leonidlukin/.rvm/gems/ruby-1.9.3-p429@moscowshows/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:251:in `require'
    from /Users/leonidlukin/.rvm/gems/ruby-1.9.3-p429@moscowshows/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:251:in `block in require'
    from /Users/leonidlukin/.rvm/gems/ruby-1.9.3-p429@moscowshows/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:236:in `load_dependency'
    from /Users/leonidlukin/.rvm/gems/ruby-1.9.3-p429@moscowshows/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:251:in `require'
    from /Users/leonidlukin/.rvm/gems/ruby-1.9.3-p429@moscowshows/gems/rvm-capistrano-1.5.6/lib/rvm/capistrano/base.rb:1:in `<top (required)>'
    from /Users/leonidlukin/.rvm/gems/ruby-1.9.3-p429@moscowshows/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:251:in `require'
    from /Users/leonidlukin/.rvm/gems/ruby-1.9.3-p429@moscowshows/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:251:in `block in require'
    from /Users/leonidlukin/.rvm/gems/ruby-1.9.3-p429@moscowshows/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:236:in `load_dependency'
    from /Users/leonidlukin/.rvm/gems/ruby-1.9.3-p429@moscowshows/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:251:in `require'
    from /Users/leonidlukin/.rvm/gems/ruby-1.9.3-p429@moscowshows/gems/rvm-capistrano-1.5.6/lib/rvm/capistrano/selector.rb:1:in `<top (required)>'
    from /Users/leonidlukin/.rvm/gems/ruby-1.9.3-p429@moscowshows/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:251:in `require'
    from /Users/leonidlukin/.rvm/gems/ruby-1.9.3-p429@moscowshows/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:251:in `block in require'
    from /Users/leonidlukin/.rvm/gems/ruby-1.9.3-p429@moscowshows/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:236:in …
Run Code Online (Sandbox Code Playgroud)

capistrano ruby-on-rails-3

40
推荐指数
2
解决办法
1万
查看次数

如何使用capistrano deploy定位特定的提交SHA

我想知道如何使用Capistrano在Git中针对特定的提交SHA进行部署?应该是这样的

cap deploy --version=<sha targeted>
Run Code Online (Sandbox Code Playgroud)

经过大量的搜索,似乎无法找到答案.

ruby deployment capistrano ruby-on-rails

37
推荐指数
3
解决办法
2万
查看次数

如何在生产中部署resque worker?

GitHub最近发布了使用Redis的后台处理应用程序:http : //github.com/defunkt/resque http://github.com/blog/542-introducing-resque

我让它在本地工作,但我很难让它在生产中工作.有没有人得到:

  1. Capistrano配方部署工人(控制工人数量,重新启动工作人员等)
  2. 部署工作人员将机器与主应用程序运行的位置分开,这里需要哪些设置?
  3. 得到redis在服务器上重启(我尝试将它放入cron但没有运气)
  4. 你是如何在你的部署中使用resque-web(他们出色的监控应用程序)的?

谢谢!

PS我在Github上发布了一个关于此的问题,但尚无回复.希望一些SO大师可以帮助解决这个问题,因为我在部署方面不是很有经验.谢谢!

capistrano ruby-on-rails delayed-job resque redis

37
推荐指数
3
解决办法
2万
查看次数

如何使用Capistrano gem种植生产数据库?

我正在使用Ruby on Rails 3.0.9并且我希望播种生产数据库以便添加一些记录而无需重新构建所有数据库(即,不删除所有现有记录但只添加一些尚未存在的记录) .我想这样做是因为需要新数据才能使应用程序正常工作.

因此,由于我正在使用Capistrano gem,我cap -T在控制台中运行命令以列出所有可用命令并知道如何实现我的目标:

$ cap -T
=> ...
=> cap deploy:seed          # Reload the database with seed data.
=> ...
Run Code Online (Sandbox Code Playgroud)

我不确定"使用种子数据重新加载数据库"中出现的"重新加载"这个词.句子.所以,我的问题是:如果我cap deploy:seed在本地机器上的控制台中运行命令,播种过程将删除生产数据库中的所有现有数据,然后填充它,或者该命令只是在我想要的数据库中添加新数据做?

ruby capistrano ruby-on-rails seed ruby-on-rails-3

36
推荐指数
6
解决办法
3万
查看次数

在启动时启动delayed_job

我正在使用带有capistrano的delayed_job,并希望使用'script/delayed_job start'启动网络应用程序时启动delayed_job.这样,capistrano可以在部署时重新启动它.如果服务器重新启动,那么我的delayed_jobs应该启动项目.

我怎样才能做到这一点?我应该在环境文件中还是作为初始化程序进行此操作?

capistrano ruby-on-rails delayed-job

34
推荐指数
4
解决办法
2万
查看次数

在Heroku上进行热部署,无需停机

推送到Heroku的一个不好的方面是我必须在运行数据库迁移之前推送代码(并且服务器自动重启).

这显然会导致用户在没有新表/属性的情况下浏览具有新代码的网站时出现大约500个错误:Heroku提出的解决方案是使用维护模式,但我想要一种没有缺点的方法让我的webapp每次都运行!

有办法吗?例如Capistrano:

  • 我准备代码部署在一个新的目录中
  • 我运行(向后)迁移,旧代码继续完美运行
  • 我将mongrel实例转换到新目录并重新启动服务器

......我没有停机时间!

ruby deployment capistrano heroku uptime

34
推荐指数
4
解决办法
9740
查看次数

如果任务失败,如何让Capistrano不回滚

我们正在使用Capistrano/Webistrano(与Lee Hambley的无轨部署宝石)将我们的PHP应用程序推送到生产服务器.我有一些在部署过程的各个部分运行的自定义任务.

作为示例,我有尝试停止并重新启动jetty solr实例的任务.但是,有时在部署期间这个位失败,因此Capistrano回滚整个部署并恢复到之前的版本.这是一种痛苦.:-)

我想告诉Capistrano忽略这些任务的返回结果,所以如果他们失败了,Capistrano就会继续前进并完成部署.事实上,我很容易ssh到服务器并正确地杀死并重新启动solr实例,而不是必须再次完成部署.

以下是部署脚本的一些相关部分:

before "deploy:symlink", :solr_kill
after "deploy:symlink", :solr_start, :solr_index

task :solr_kill do
    run "cd #{current_path}/Base ; #{sudo} phing solr-kill"
end

task :solr_start do
    run "cd #{current_path}/Base ; #{sudo} phing solr-start"
    run "sleep 10"
end

task :solr_index do
    run "#{sudo} #{current_path}/Base/Bin/app.php cron run solr_index_cron"
end
Run Code Online (Sandbox Code Playgroud)

capistrano

34
推荐指数
1
解决办法
1万
查看次数

Capistrano:我可以为整个上限会话设置一个环境变量吗?

我有一个安装了标准Ruby和Ruby Enterprise的登台服务器.由于标准Ruby拒绝安装一个关键的gem,我需要设置$ PATH以便ruby/gem/rake/etc.总是参考REE版本.由于我使用Capistrano部署到我们的机器上,我需要在Capistrano中进行.

如何设置一次环境变量,并让它在整个Capistrano会话中保持不变?

1)在bashrc文件中很容易,但Capistrano不读取bashrc文件.

2)我会使用Capistrano的

default_environment['PATH'] = 'Whatever'
Run Code Online (Sandbox Code Playgroud)

但是Capistrano使用这些环境变量

env PATH=Whatever command arg ...
Run Code Online (Sandbox Code Playgroud)

每当另一个shell在传递给env的可执行文件中旋转时,它们就会丢失.就像你使用sudo一样.这有点重要:

[holt@Michaela trunk]$ env VAR=hello ruby -e "puts ENV['VAR']"
hello
[holt@Michaela trunk]$ env VAR=hello sudo ruby -e "puts ENV['VAR']"
nil
Run Code Online (Sandbox Code Playgroud)

3)我不能使用bash export命令,因为它们也丢失了--Capistrano似乎为每个命令(或类似的东西)启动了一个新shell,而且它也丢失了:

cap> export MYVAR=12
[establishing connection(s) to xxx.xxx.xxx.xxx]
cap> echo $MYVAR
 ** [out :: xxx.xxx.xxx.xxx] 
cap> 
Run Code Online (Sandbox Code Playgroud)

4)我已经尝试过使用Capistrano的:shell和:pty选项(并结合其他方法),但也没有运气.

那么 - 这样做的正确方法是什么? 这似乎是一个基本的任务,应该有一个非常简单的方法来完成它,但我没有想法.任何人?

提前致谢!

capistrano environment-variables

34
推荐指数
3
解决办法
3万
查看次数