我正在使用github来存储存储库,而我正在阅读使用Capistrano进行部署:
远程缓存将在你正在部署的服务器上保留一个本地git repo,并且只是从那个而不是整个克隆运行一个fetch".
由于我正在部署的服务器是"我的" 共享主机,我必须在那里安装git.
当我们这样做时,我们通常会定义一个git用户名和git密码.我们应该将这些文件放在这个deploy.rb文件中?
到目前为止,我有:
set :application, "mysite.dev"
set :user, "myuser"
set :repository, "git@github.com:gituser/gitproject.git"
role :web, "dev.mysite.pt"
set :deploy_to, "/home/mysite/www/dev"
set :use_sudo, false
set :scm, :git
set :branch, 'master'
#set :deploy_via, :copy
#set :copy_cache, true
#set :copy_exclude, %w(.git)
set :deploy_via, :remote_cache
task :create_symlinks, :roles => :web do
run "rm #{current_release}/public/.htaccess"
run "ln -s #{current_release}/production/.htaccess
#{current_release}/public/.htaccess"
end
after "deploy:finalize_update", :create_symlinks
Run Code Online (Sandbox Code Playgroud)
我不应该在某处以某种方式在deploy.rb文件中放置对我的共享主机git密码的引用吗?
我有部署服务器用户:
set :user, "myuser"
Run Code Online (Sandbox Code Playgroud)
这个密码是来自github用户的密码,还是我们应该在这里放置我们的共享主机密码?
set :scm_passphrase, "p@ssw0rd" # The deploy user's password
Run Code Online (Sandbox Code Playgroud) 我即将使用工头在生产中使用upstart导出来开始一些无限的rake任务.
我简陋的"守护进程"就像这样简单:
task magic: :environment do
loop do
make_stuff_happen
sleep 10
end
end
Run Code Online (Sandbox Code Playgroud)
我想知道工头是否在被要求重启时不会直接杀死进程(例如,capistrano deploy),因为我不希望因此而发生任何损坏的操作.
如果是这样,如何预防呢?
试图使 'FILTER=app cap deploy',但收到此错误。它在一个笔记本上引发,但另一个成功部署。
它可能是什么?
选项:os-x、rails、mongo、ec2、橡胶。
[deploy:update_code] exception while rolling back: Capistrano::ConnectionError, connection failed for: app.uncoverage.com (SocketError: getaddrinfo: nodename nor servname provided, or not known) connection failed for: app.uncoverage.com (SocketError: getaddrinfo: nodename nor servname provided, or not known) Vyacheslavs-MacBook-Air:uncoverage vekozlov$ git reset --hard HEAD
Run Code Online (Sandbox Code Playgroud)
UPD 我将主机添加到 /etc/hosts 并且它工作正常。
我是 Python 和 Fabric 的新手。我们目前使用 capistrano 并有类似的设置:
/api-b2b
- Capfile (with generic deployment/setup info)
/int - target host config (like ip, access etc.)
/prod - target host config (like ip, access etc.)
/dev - target host config (like ip, access etc.)
/api-b2c
/int
/prod
/dev
/application1
/int
/prod
/dev
/application2
/int
/prod
/dev
Run Code Online (Sandbox Code Playgroud)
我们对 capistrano 处理我们的 Java 应用程序不满意——fabric 看起来是一个更好(更简单)的替代方案。
到目前为止,我看到的所有示例 fabfile 都“相对简单”,因为它们仅处理不同主机的一个应用程序。我想看到一些代码,其中不同的应用程序/主机由相同的结构文件/基础设施(如继承等)处理,以便为 git 处理、目录创建、符号链接等常见任务共享相同的逻辑。我希望你明白我的意思。我希望整个逻辑相同,只是应用程序配置不同(git repo,目标目录)。所有其余的在应用程序中都是相同的(相同的服务器布局......)
我希望能够输入这样的东西
$ cd api-b2b
$ fab env_prod deploy
$ cd api-b2c
$ fab env_prod deploy …
Run Code Online (Sandbox Code Playgroud) 在终端上执行cap qa deploy后,我在部署结束时收到以下错误:
failed: "sh -c 'cd [removed]/releases/[removed] && bundle exec whenever --update-crontab [removed] --set environment=production --roles db'" on [removed]
Run Code Online (Sandbox Code Playgroud)
我困惑的第一件事是当我使用capistrano和deploy时,为什么它在db角色上运行when命令?它不应该自动在app角色上运行命令吗?
在服务器上: Bundler版本1.3.5
的Gemfile:
gem 'whenever', require: false
Run Code Online (Sandbox Code Playgroud)
schedule.rb:
env 'PATH', ENV['PATH']
set :output, "/log/cron.log"
set :stage, :environment_variable
every 5.minutes, :roles => [:app] do
runner "[removed]"
end
every 1.day, :at => '0:01 am' do
command "[removed]"
end
Run Code Online (Sandbox Code Playgroud)
deploy.rb:
require 'capistrano/log_with_awesome'
require "bundler/capistrano"
set :application, "[REMOVED]"
set :scm, :git
set :repository, "[REMOVED]"
set :branch, "master"
set :deploy_via, :remote_cache
set …
Run Code Online (Sandbox Code Playgroud) 我无法让Capistrano运行我的数据库迁移.
我正在使用DigitalOcean提供的VPS来托管我的Rails应用程序.以前我会用git push heroku master
Heroku主持我的项目,但现在我想要更便宜的东西.我正在尝试使用Capistrano将我的代码部署到服务器(使用本教程启动并运行).我可以成功地将新提交到服务器上,但是,我无法让Capistrano运行我的数据库迁移.
为了展示我的问题,我创建了一个新模型,提交了更改,推送到Github repo,然后运行cap production deploy
.我查看了服务器,我可以看到新的迁移文件. 以下是该命令的输出,以防它在调试问题时有所帮助.
当我运行cap production deploy:migrate
数据库时没有任何反应:
~/Projects/rails/testapp $ cap production deploy:migrate
DEBUG[aec67347] Running /usr/bin/env [ -d ~/.rbenv/versions/2.1.3 ] on 104.236.181.65
DEBUG[aec67347] Command: [ -d ~/.rbenv/versions/2.1.3 ]
DEBUG[aec67347] Finished in 1.107 seconds with exit status 0 (successful).
Run Code Online (Sandbox Code Playgroud)
这是我在生产服务器上的PostgeSQL数据库(没有改变):
testapp_production=> \d
List of relations
Schema | Name | Type | Owner
--------+-------------------+----------+--------
public | cars | table | deploy
public | cars_id_seq | sequence …
Run Code Online (Sandbox Code Playgroud) 我有一个ruby on rails项目要与capistrano一起部署.基本上我可以使用以下代码部署它.
cap production deploy
Run Code Online (Sandbox Code Playgroud)
但它给了我以下失败信息.
** Invoke staging (first_time)
** Execute staging
** Invoke load:defaults (first_time)
** Execute load:defaults
cap aborted!
Capfile locked at 3.2.1, but 3.3.3 is loaded
Run Code Online (Sandbox Code Playgroud)
我在这个例外上找不到任何东西.你知道什么是真正的问题.BTW捆绑更新不起作用.
我正在尝试使用Capistrano部署我的应用程序,但我收到此错误:
Your Gemfile.lock is corrupt. The following gem is missing from the DEPENDENCIES
section: 'nokogiri'
Run Code Online (Sandbox Code Playgroud)
我看到这个问题,不幸的是,解决方案(切换Bundler版本)对我不起作用: Travis报告了损坏的Gemfile.lock的奇怪消息
我试过:在添加到我之后删除gemfile.lock
(和做一个bundle _1.10.6_ install
),但我仍然得到同样的错误.nokogiri
gemfile
这是我的gemfile
:
source 'http://rubygems.org'
gem 'rails', '4.2.5'
gem 'mysql2', '0.4.2'
gem 'sass-rails', '~> 4.0.3'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'jquery-rails', '4.0.5'
gem 'turbolinks', '2.5.3'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc
gem 'whenever', '0.9.4', :require => false
gem 'simple_form', '3.2.0'
gem 'devise', '3.5.2'
gem 'omniauth-facebook', '3.0.0' …
Run Code Online (Sandbox Code Playgroud) 我的Rails(4.2)应用程序通过Ubuntu(14.02)系统上的Passenger(5.0.28)+ Apache(2.4.7)运行,使用rbenv管理的ruby(2.3.0)。我使用Capistrano(3.4.0)进行部署。
我所有的环境变量都在一个非常简单的profile.d
脚本中设置。
#!/bin/sh
export VAR1=VAL1
export VAR2=VAL2
Run Code Online (Sandbox Code Playgroud)
这就像一个魅力。我的应用程序ENV
具有所有正确的变量,Secrets.yml
并已正确填充...除了通过ssh与Capistrano进行部署外,其他所有功能均正常运行。
在我的deploy.rb
书中,我认为以下内容是相对的:
set :ssh_options, {
forward_agent: true,
paranoid: true,
keys: "~/.ssh/id_rsa.pub"
}
Run Code Online (Sandbox Code Playgroud)
Capistrano文档非常有限,并且ssh \ server配置不是我的强项,我似乎无法弄清楚为什么ENV
Capistrano无法看到我的变量。如果我puts ENV.inspect
在部署流程中运行,则会得到诸如"TERM_PROGRAM"=>"Apple_Terminal"
本地机器用户信息之类的信息。Capistrano为什么不使用远程环境?如何在服务器端或在部署脚本中修改配置以解决此问题?
谢谢您的帮助。
我刚刚将我们的应用程序升级到Rails 5.1应用程序,并使用webpacker包含React和一些自定义组件.真是太容易了!谢谢!
我注意到这增加了大约100 MB到node_modules目录.这很酷,我知道它带有NPM区域,并且默认情况下在新的rails项目中对文件夹进行gitignored,因此它不会使repo混乱.那很棒!
我希望更好的是现在部署需要很长时间,因为服务器必须在每次部署时从NPM下载所有这些软件包.我们正在使用capistrano 3部署到AWS.是否有一种安全的方法可以将NPM软件包存储在服务器上的某个地方,这些软件包在部署过程中持续存在,因此不必每次都下载它们?
capistrano ×10
capistrano3 ×2
deployment ×2
amazon-ec2 ×1
cron ×1
fabric ×1
foreman ×1
gemfile.lock ×1
git ×1
mongodb ×1
passenger ×1
python ×1
rbenv ×1
ssh ×1
whenever ×1