所以我使用Capistrano将rails应用程序部署到我的生产服务器(apache + passenger),目前部署通常是这样的:
$cap deploy
$cap deploy:migrations
Run Code Online (Sandbox Code Playgroud)
它让我想知道,让我们说我的db:迁移花了很长时间在生产服务器上执行(db模式的一个重要的重构) - 在这种情况下,Capistrano的最佳实践是什么?如果用户在部署时连接到我的应用程序会发生什么?在更新数据库时,我应该优雅地将用户发送到静态占位符页面吗?Capistrano是否自动处理?我是否需要编写配方来帮助解决这个问题?或者铁路/乘客的内部机制是否意味着我不必担心这个特殊情况?
谢谢.
我正在使用带有资产和载波的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的解决方案是解决这个问题的最佳方法.
在我最近的一个项目中,我从.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 .将在某个时候分享我的发现.:-)
我想运行一个远程命令(在几个文件夹中的current_revision和HEAD的git diff)并捕获输出.
我试过run("git diff rev1 rev2 - folder | cat"),但是方法总是返回似乎返回nil(即使我能看到Capistrano输出中的diff输出).
有任何想法吗?我可以使用不同的方法来管理命令,或类似的东西吗?我不是一个Unix巫师,所以它可能是我在这里失踪的微不足道的东西.
历史:
然后我决定按照"使用Rails进行敏捷Web开发"对GIT/cap部署进行适当的部署和设置.
现在的情况是:
对于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)
在这里用尽了想法,并希望得到一些建议.
例如:
task :restart, :roles => :app, :except => { :no_release => true } do
end
Run Code Online (Sandbox Code Playgroud) 我是linux容器的总菜鸟,并花了一些时间了解Docker,并原谅我的困惑想到了这个问题.目前,我通过capistrano部署生产的Rails应用程序.我的云服务器使用Debian Wheezy发行版上的Opscode Chef进行维护.对于开发,我有一个预先安装了应用程序和服务的Vagrant VM.
如果我使用Docker,我的应用程序会在哪里?容器还是主机?我将如何部署(生产)和共享目录(开发)?我可以使用docker在同一台服务器上运行所有其他服务,即memcache,redis,postgresql等吗?我可以想象Docker的潜力,但却难以看到它的实际用途.
似乎容器是未来的一部分.对于从虚拟化转换的人的任何指导?
我尝试使用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) 现在,我必须运行cap deploy和cap deploy:如果要运行迁移,则迁移.
我如何修改cap deploy任务以运行迁移.
我们有一个EC2实例,我们的capistrano设置需要ssh.要通过ssh正常连接,我使用.pem文件连接到服务器.使用capistrano进行部署时如何利用此.pem文件?
capistrano ×10
amazon-ec2 ×1
apache ×1
carrierwave ×1
deployment ×1
docker ×1
dsl ×1
passenger ×1
ruby ×1
rvm ×1
security ×1
shell ×1
ssh ×1