标签: capistrano

Capistrano部署rails应用程序 - 如何处理长迁移?

所以我使用Capistrano将rails应用程序部署到我的生产服务器(apache + passenger),目前部署通常是这样的:

$cap deploy
$cap deploy:migrations
Run Code Online (Sandbox Code Playgroud)

它让我想知道,让我们说我的db:迁移花了很长时间在生产服务器上执行(db模式的一个重要的重构) - 在这种情况下,Capistrano的最佳实践是什么?如果用户在部署时连接到我的应用程序会发生什么?在更新数据库时,我应该优雅地将用户发送到静态占位符页面吗?Capistrano是否自动处理?我是否需要编写配方来帮助解决这个问题?或者铁路/乘客的内部机制是否意味着我不必担心这个特殊情况?

谢谢.

apache capistrano ruby-on-rails passenger

25
推荐指数
2
解决办法
6266
查看次数

Capistrano的Carrierwave文件

我正在使用带有资产和载波的rails 3.2来上传一些图像,它们存储在/ public/uploads/photo/.....但当我执行上限时:部署(使用capistrano)我的当前目录应用程序不包含我上传的文件,因为capistrano制作了新版本....

===更新===

毕竟我用这个:

inside:deploy命名空间

   task :symlink_uploads do
     run "ln -nfs #{shared_path}/uploads  #{release_path}/public/uploads"
   end
Run Code Online (Sandbox Code Playgroud)

之后:

after 'deploy:update_code', 'deploy:symlink_uploads'
Run Code Online (Sandbox Code Playgroud)

===重新更新===

@tristanm的解决方案是解决这个问题的最佳方法.

capistrano ruby-on-rails ruby-on-rails-3 carrierwave

25
推荐指数
2
解决办法
8790
查看次数

如何在Rails 4.1中使用secrets.yml for API_KEYS?

在我最近的一个项目中,我从.gitignoring包含秘密和环境变量的文件开始.所以整个项目都致力于repo,除了包含第三方秘密的文件,如Stripe,Twitter API或Facebook Graph或内部api_keys,./config/initializers/secret_token.rb文件等.

现在我正处于项目即将上线的地步(兴奋!)我需要使用Capistrano将所有环境变量移植到生产服务器上,即 cap production deploy.

[编辑4:是的,2018年]在initializers/secret_token.rb的情况下,很明显Rails 4.1有一种处理secrets.yml文件的新方法,该文件将:secret_key_base值拉入生产服务器.在这里,我建议使用capistrano-secrets-yml gem,它开箱即用,并且易于使用.

剩下的是将其他秘密(如API_KEYS,APP_ID等)传送到生产服务器而不检查任何进入仓库的方法.如何做到这一点,最推荐/最安全的方式或最佳做法是什么?

注意:随着时间的推移,我将编辑问题/我会更清晰.

EDIT1:Server是DigitalOcean上的Ubuntu/Linux VPS [回答丹尼斯,下面].

EDIT2:env_variables/secrets可以通过secrets.yml转发到服务器吗?会话的Secret_token毕竟不是唯一的秘密![在Edit3上回答]

编辑3:是的!根据这个博客,可以通过secrets.yml发送API_keys .将在某个时候分享我的发现.:-)

security capistrano ruby-on-rails

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

如何在Capistrano中捕获远程命令的输出?

我想运行一个远程命令(在几个文件夹中的current_revision和HEAD的git diff)并捕获输出.

我试过run("git diff rev1 rev2 - folder | cat"),但是方法总是返回似乎返回nil(即使我能看到Capistrano输出中的diff输出).

有任何想法吗?我可以使用不同的方法来管理命令,或类似的东西吗?我不是一个Unix巫师,所以它可能是我在这里失踪的微不足道的东西.

ruby shell capistrano

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

通过Capistrano部署Rails应用程序时出现RVM错误

历史:

  • 阅读将Rails3应用程序部署到Mediatemple DV服务器.
  • 在服务器上安装RVM,ruby和必备的宝石.
  • 如果我将它FTP起来,网站工作正常.
  • 都好.

然后我决定按照"使用Rails进行敏捷Web开发"对GIT/cap部署进行适当的部署和设置.

  • 尝试使用上限进行部署,但是生产站点无法使用宝石出错.
  • 阅读并意识到我应该进行系统范围的RVM安装.
  • 删除了所有宝石和RVM.
  • 已安装RVM系统.
  • 上限部署错误"bash:/home/foo/.rvm/bin/rvm-shell:没有这样的文件或目录",这是有道理的 - 主目录中没有.rvm /.
  • 从最初安装RVM以作为用户使用时,我想到了一些问题,我删除了用户,删除了主目录,并重新创建了具有权限的用户.
  • 上限部署相同的错误"bash:/home/foo/.rvm/bin/rvm-shell:没有这样的文件或目录"

现在的情况是:

对于foo,.bashrc包含最后一行:

[[ -s '/usr/local/lib/rvm' ]] && source '/usr/local/lib/rvm'
Run Code Online (Sandbox Code Playgroud)

当我发出:

type rvm | head -1
Run Code Online (Sandbox Code Playgroud)

响应是"rvm是一个函数".

/ etc/rvmrc包含

if [[ ! -s "$HOME/.rvm/scripts/rvm" ]]; then
  umask g+w
  export rvm_selfcontained=0
  export rvm_prefix="/usr/local/"
fi
Run Code Online (Sandbox Code Playgroud)

在这里用尽了想法,并希望得到一些建议.

capistrano rvm ruby-on-rails-3

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

24
推荐指数
1
解决办法
8117
查看次数

运行和部署Rails到Docker容器

我是linux容器的总菜鸟,并花了一些时间了解Docker,并原谅我的困惑想到了这个问题.目前,我通过capistrano部署生产的Rails应用程序.我的云服务器使用Debian Wheezy发行版上的Opscode Chef进行维护.对于开发,我有一个预先安装了应用程序和服务的Vagrant VM.

如果我使用Docker,我的应用程序会在哪里?容器还是主机?我将如何部署(生产)和共享目录(开发)?我可以使用docker在同一台服务器上运行所有其他服务,即memcache,redis,postgresql等吗?我可以想象Docker的潜力,但却难以看到它的实际用途.

似乎容器是未来的一部分.对于从虚拟化转换的人的任何指导?

capistrano ruby-on-rails docker

24
推荐指数
1
解决办法
7381
查看次数

在使用Rails为capistrano 3.8.0运行'cap production deploy'时,不知道如何构建任务'start'

我尝试使用capistrano部署我的rails网站.所以,当我跑

cap production deploy
Run Code Online (Sandbox Code Playgroud)

这就是我得到的

(Backtrace restricted to imported tasks)
cap aborted!
Don't know how to build task 'start' (see --tasks)

Tasks: TOP => production
Run Code Online (Sandbox Code Playgroud)

这是我的上限文件

# Load DSL and Setup Up Stages
require 'capistrano/setup'
require 'capistrano/deploy'

require 'capistrano/rails'
require 'capistrano/bundler'
require 'capistrano/rvm'
require 'capistrano/puma'
require 'capistrano/scm/git'

install_plugin Capistrano::SCM::Git

# Loads custom tasks from `lib/capistrano/tasks' if you have any defined.
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }
Run Code Online (Sandbox Code Playgroud)

这是我的deploy.rb

set :repo_url,        'xxx'
set :application,     'xxx'
set :user,            'yyy'
set :puma_threads,    [4, 16] …
Run Code Online (Sandbox Code Playgroud)

capistrano ruby-on-rails

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

如何修改capistrano部署以在Rails 3.0中自动运行迁移

现在,我必须运行cap deploy和cap deploy:如果要运行迁移,则迁移.

我如何修改cap deploy任务以运行迁移.

deployment capistrano ruby-on-rails ruby-on-rails-3

23
推荐指数
2
解决办法
7733
查看次数

使用pem文件使用capistrano进行部署

我们有一个EC2实例,我们的capistrano设置需要ssh.要通过ssh正常连接,我使用.pem文件连接到服务器.使用capistrano进行部署时如何利用此.pem文件?

ssh capistrano ruby-on-rails amazon-ec2

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