我通过Capitrano从Git存储库进行了简单的部署.起初我正在部署GitHub表单,一切正常.但后来我将我的存储库移动到BitBucket,现在我已经到了
fatal: Could not parse object '9cfb...'.
Run Code Online (Sandbox Code Playgroud)
一旦我改变,问题就消失了
set :deploy_via, :remote_cache
Run Code Online (Sandbox Code Playgroud)
至
set :deploy_via, :copy
Run Code Online (Sandbox Code Playgroud)
但这并没有解决问题,只能绕过它.有什么办法我可以告诉capistrano只丢弃旧缓存吗?
我有一个Ruby on Rails应用程序,我正在运行Mac OS X 10.6的计算机上部署.出现问题的代码由delayed_job运行.只有当它通过delayed_job运行时才会出现此问题.如果我在控制台(rails console production)中运行它或直接通过cURL调用API,它可以正常工作.此外,整个过程在我的开发环境中没有问题.
基本上,代码在一个地方工作,但由于某种原因,在必须工作的地方失败.我搜索并找到了一些资源,但没有一个建议适用或有任何区别.当我登录服务器并运行命令时,一切正常.但由于某些原因,当它们由Capistrano运行/启动时,它不起作用.
任何帮助是极大的赞赏.
重要笔记:
码:
class CallApi < Struct.new(:num)
def perform
log "Entering perform"
apinum = num || 5
log "ApiNum = #{apinum}"
results = attempt(2,10) do
ActiveSupport::JSON.decode(RestClient.get(API_URL, {:params => {:apinum => apinum}}))
end
log "Results retrieved. (count: #{results.count})"
end
def log(message)
Delayed::Worker.logger.info "[CallApi] #{Time.now} - #{message}"
end
end
Run Code Online (Sandbox Code Playgroud)
环境配置(注意:网址是假的,但形式与真实网址相同):
API_URL = "http://api.example.org/api_endpoint"
# Originally, I had "http://" before the beginning, but found a …Run Code Online (Sandbox Code Playgroud) 我的主分支布局是这样的:
/ < - 顶级
/ client < - 桌面客户端源文件
/ server < - Rails app
我想做的只是拉下我的/ server目录deploy.rb,但我似乎找不到任何办法./ client目录很大,因此设置一个钩子来复制/服务器到/将无法正常工作,它只需要拉下Rails应用程序.
我的部署速度很慢,至少需要3分钟.部署期间缓慢的Capistrano任务是资产:预编译.这大约占总部署时间的99%.我怎样才能加快速度呢?我应该在我的本地计算机上预编译我的资产并将它们添加到我的git仓库吗?
编辑:添加config.assets.initialize_on_precompile = false到我的application.rb文件,半分钟后删除预编译时间,但它仍然很慢.
我想以最快,最简单,最惯用的方式使用Ruby 只读取文件的第一行.什么是最好的方法?
(具体来说:我想从我最新的Capistrano部署的Rails目录中的REVISION文件中读取git commit UUID,然后将其输出到我的标签.这将让我看到http浏览器部署到我的服务器的版本如果有完全不同的更好的方法,请告诉我.)
我们在subversion中有一个rails应用程序,我们使用Capistrano进行部署但注意到我们可以访问'/.svn'中的文件,这引起了安全问题.
我想知道最好的方法是什么.一些想法:
我真的不喜欢删除文件夹或使用svn export的想法,因为我想保留'svn info'.
我有一个生产系统,有几个角色的服务器.我想通过部署到该特定服务器来测试新的应用服务器,而无需重新部署到生产中的每个服务器.有没有办法让Capistrano部署到特定的服务器?理想情况下,我希望能够运行类似的东西
cap SERVER=app2.example.com ROLE=app production deploy
Run Code Online (Sandbox Code Playgroud)
如果我只是想部署到app2.example.com.
谢谢!
[更新]我通过执行以下方法尝试了wulong建议的解决方案:
cap HOSTS=app2.server.hostname ROLE=app qa deploy
Run Code Online (Sandbox Code Playgroud)
但是除了app任务之外,capistrano似乎还在尝试为该服务器上的其他角色执行任务.也许我需要更新我的帽子版本(我正在运行v2.2.0)?
我有一个基本的Rails 3应用程序在我的开发盒上本地工作,但是想要尽早测试部署以确保一切正常.我正在使用Capistrano进行部署.
当我运行cap deploy(在所有其他必要的设置之后)时,它会在此命令中出现此错误:
[...]
* executing 'bundle:install'
* executing "bundle install --gemfile /var/www/trex/releases/20100917172521/Gemfile --path /var/www/trex/shared/bundle --deployment --quiet --without development test"
servers: ["www.[my domain].com"]
[www.[my domain].com] executing command
** [out :: www.[my domain].com] sh: bundle: command not found
command finished
[...]
Run Code Online (Sandbox Code Playgroud)
所以看起来它无法bundle在服务器上找到命令.
但是,当我登录到服务器时......
$ ruby -v
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux]
$ rails -v
Rails 3.0.0
$ bundle -v
Bundler version 1.0.0
Run Code Online (Sandbox Code Playgroud)
... bundle命令工作正常.
怎么可能出错?
-
(此外,为了完整:)
$ which ruby
~/.rvm/rubies/ruby-1.9.2-p0/bin/ruby
$ which rails …Run Code Online (Sandbox Code Playgroud) 我已经成功地使用了capistrano一段时间,并且在每个项目中我突然失去了部署能力.
环境:
我没有使用rsa_keys或任何我想要capistrano来提示用户和密码.突然它决定不要求密码,但确实要求用户.然后它回滚并给我以下错误.
[deploy:update_code] exception while rolling back: Capistrano::ConnectionError, connection failed for: sub.example.com (Net::SSH::AuthenticationFailed: Authentication failed for user user@sub.example.com)
connection failed for: sub.example.com (Net::SSH::AuthenticationFailed: Authentication failed for user user@sub.example.com)
Run Code Online (Sandbox Code Playgroud)
这发生在我的个人笔记本电脑和我的iMac上.它部署到两个不同的服务器(两个Linux)时发生
我在这里完全不知所措.有任何想法吗?
我需要对deploy.rb下面的文件进行哪些更改才能从本地git repo部署我的应用程序?如果我无法从本地仓库部署,我可以让capistrano使用工作复制吗?
set :application, "my_app"
set :repository, "."
set :local_repository, "file:///path/to/application/.git"
set :deploy_to, "/data/www/apps/#{application}"
set :deploy_via, :copy
set :copy_cache, true
set :user, "dane"
set :use_sudo, false
set :scm, :git # Should I change this to :none
set :branch, "master"
Run Code Online (Sandbox Code Playgroud) capistrano ×10
deployment ×5
ruby ×4
git ×3
apache ×1
bundler ×1
delayed-job ×1
file-io ×1
svn ×1