Capistrano部署到测试和生产环境

6
我正在尝试使用Capistrano将Ruby On Rails应用程序部署到staging和production两个环境。两者之间唯一的区别在于:domain和:repository。
我按照此处的指南进行操作:https://github.com/capistrano/capistrano/wiki/2.x-Multistage-Extension
我在网上搜索,但基本上都是重复上述内容的文章。
我尝试在config/deploy/staging.rb和config/deploy/production.rb中设置:domain和:repository。
我检查了拼写,确保正确拼写子目录和文件名。
阅读这篇文章:staging and live app with capistrano,看起来我应该只需在此处声明差异即可。
看起来实际上没有读取staging.rb文件。我将“deploy.rb”更改为第一行仅包含一个脏话,“cap deploy”给出了预期的错误。
如果我在“staging.rb”或“production.rb”的第一行放置一个脏话,我会得到相同的错误:
`method_missing': undefined local variable or method `domain'

该行代码如下:

这行的具体内容是:

role :web, domain

因为值没有被捕获。但是在staging.rb或production.rb中的单个脏话应该会导致失败并且根本不运行,不是吗?

如果我将:domain和:repository移回主要的“deploy.rb”文件,则会在脏话处出现错误。因此,似乎我不能在“staging.rg”和“production.rb”文件中设置变量,而只能完成任务。

任何帮助都将不胜感激,或者您认为我应该接受披萨外送工作...

deploy.rb:

require 'capistrano/ext/multistage'
set :stages, %w(production staging)
set :default_stage, "staging"

set :user, 'dave'

set :applicationdir, "~/rails/example.com"

set :scm, 'git'

set :git_enable_submodules, 1 # if you have vendored rails
set :branch, 'master'
set :git_shallow_clone, 1
set :scm_verbose, true

set :keep_releases, 5
after "deploy:update", "deploy:cleanup"

# roles (servers)
role :web, domain
role :app, domain
role :db,  domain, :primary => true

after "deploy", "deploy:migrate"

# deploy config
set :deploy_to, applicationdir
set :deploy_via, :export
# set :rake, 'bundle exec rake'

# additional settings
default_run_options[:pty] = true  # Forgo errors when deploying from windows
set :ssh_options, {:forward_agent => true}
#ssh_options[:keys] = %w(/home/user/.ssh/id_rsa)            # If you are using ssh_keysset :chmod755, "app config db lib public vendor script script/* public/disp*"set :use_sudo, false


# Passenger
namespace :deploy do
   task :start do ; end
   task :stop do ; end
   task :restart, :roles => :app, :except => { :no_release => true } do
      run " touch #{File.join(current_path,'tmp','restart.txt')}"
   end
end

我的config/deploy/staging.rb文件如下:

set :domain, 'example.com'
set :repository,  "ssh://dave@example.com/~/rails/chamonix-mont-blanc.net"

如果我将 :domain 和 :repository 放在主要的 "deploy.rb" 文件中,一切都能正常运作。
1个回答

5

roles移至您的staging.rb文件,使其如下所示:

set :domain, 'example.com'

role :web, domain
role :app, domain
role :db,  domain, :primary => true

set :repository,  "ssh://dave@example.com/~/rails/chamonix-mont-blanc.net"

请从deploy.rb中删除角色代码。同样,您还需要类似地修改您的production.rb文件。


9
没错。非常感谢!一切正常。我会告诉披萨外卖公司我不需要他们的工作了!! - Jez Caudle
:D :D :D :D :D :D - jedi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接