2012-08-17 14 views
6

Ich versuche, eine Ruby On Rails-App sowohl für die Bereitstellung als auch für die Produktion mit Capistrano bereitzustellen.Capistrano Bereitstellung in Staging und Produktion

Der einzige Unterschied zwischen den beiden ist die: Domäne und das: Repository

ich diese Anleitung hier gefolgt sind: https://github.com/capistrano/capistrano/wiki/2.x-Multistage-Extension

ich um das Netz gesucht und alles, was ich finden sind Artikel, die im Grunde wieder aufwärmen, was Ich habe oben.

Ich habe versucht, nur die Einstellung: Domain und: Repository in der config/deploy/staging.rb und config/deploy/production.rb

Ich habe meine Schreibweisen überprüft, um sicherzustellen, dass ich die Unter dirs Dinkel richtig und die Namen der Dateien.

Lesen Sie diesen Artikel: staging and live app with capistrano es sieht so aus, als ob ich nur in der Lage sein sollte, die Unterschiede hier zu erklären.

Es sieht nicht so aus, als würde die staging.rb-Datei tatsächlich gelesen. Ich habe meine "deploy.rb" geändert, um ein einziges Schimpfwort als erste Zeile zu haben, "cap deploy" gibt mir den erwarteten Fehler.

Stecke ich ein einziges Wort schwören auf die erste Zeile von „staging.rb“ oder „production.rb“ Ich habe den gleichen Fehler:

`method_missing': undefined local variable or method `domain' 

Die Linie in Frage:

role :web, domain 

weil der Wert nicht aufgenommen wird. Aber sicher sollte es auf dem einzelnen Schimpfwort in staging.rb oder production.rb scheitern und gar nicht laufen?

Wenn ich das: Domain und: Repository zurück in die Hauptdatei "deploy.rb" verschiebe, bekomme ich den Fehler mit dem Schimpfwort. Es sieht also so aus, als könnte ich in den Dateien "staging.rg" und "production.rb" keine Variablen setzen, sondern nur Aufgaben erledigen.

Jede Hilfe wäre viel oder geschätzt werden, denken Sie, ich sollte die Pizza-Lieferung Job nur nehmen ...

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 

Und meine config/deploy/staging.rb Datei :

setzen
set :domain, 'example.com' 
set :repository, "ssh://[email protected]/~/rails/chamonix-mont-blanc.net" 

Wenn ich das: Domain und: Repository im Haupt „deploy.rb“ es ist alles schön und gut funktioniert.

Antwort

5

Verschieben roles auf Ihre staging.rb-Datei, so dass es aussieht wie

set :domain, 'example.com' 

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

set :repository, "ssh://[email protected]/~/rails/chamonix-mont-blanc.net" 

aus deploy.rb Rollen Code entfernen. Außerdem müssen Sie Ihre production.rb ähnlich ändern.

+7

Spot auf. Vielen Dank!! Alles funktioniert. Ich werde der Pizza-Lieferfirma sagen, dass ich ihren Job nicht will !! –

Verwandte Themen