2011-11-21 38 views
16

Tôi gặp một số vấn đề với thiết lập capistrano sau khi cập nhật đá quý của tôi gần đây. Tôi có một thiết lập nhiều tầng với một thiết lập sản xuất và dàn dựng.Capistrano Multistage triển khai vào đúng thư mục

/config/deploy.rb

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

/config/deploy/production.rb

# Set deploy path 
set :deploy_to, "/var/www/mysite/live" 
set :rails_env, "production" 

/config/deploy/testing.rb

# Set deploy path 
set :deploy_to, "/var/www/mysite/test" 
set :rails_env, "test" 

Vấn đề là có vẻ như bỏ qua cài đặt deploy_to của tôi. Nó chỉ triển khai mặc định/u/apps/mysite.

Tôi không biết nếu nó có bất kỳ sự liên quan nào, nguyên nhân của tất cả điều này là di chuyển từ apache + hành khách đến nginx + kỳ lân. Tôi không nghĩ rằng nó có bất cứ điều gì để làm với điều đó mặc dù, vì đây chỉ là quá trình thanh toán.

+1

Cần phải có một cách để làm điều này mà không trùng lặp cấu hình trên mọi giai đoạn. Ý tưởng? – thekingoftruth

+0

Trả lời câu hỏi của bạn bằng giải pháp và chấp nhận câu hỏi, vì vậy nó sẽ hiển thị như đã trả lời. – mrbrdo

Trả lời

0

tôi cuối cùng đã giải quyết điều này bằng cách thêm dòng sau vào triển khai của tôi/production.rb và testing.rb

set(:deploy_to)   { "/var/www/#{application}/live" } 
set(:releases_path)  { File.join(deploy_to, version_dir) } 
set(:shared_path)  { File.join(deploy_to, shared_dir) } 
set(:current_path)  { File.join(deploy_to, current_dir) } 
set(:release_path)  { File.join(releases_path, release_name) } 
0

Sản xuất và kiểm tra.rb ở đâu trong dự án?

Đảm bảo rằng chúng dưới config/deploy.

+0

Có, chúng nằm trong /config/deploy/production.rb & testing.rb –

+0

thử yêu cầu 'capistrano/ext/multistage' trước khi đặt các giai đoạn – kain

+0

Tôi cũng sẽ thử sử dụng set: deploy_to, "/ mypath/# { stage} "trong deploy.rb chính – kain

9

Tôi tình cờ gặp điều này trong khi trên Stack Overflow. Đó là một câu hỏi cũ nhưng kể từ khi được gắn cờ là mở tôi sẽ cho nó một shot.

Tôi nghĩ rằng đây có thể là vấn đề phạm vi với cách các trường hợp Capistrano được tải.

tôi nhận thấy cú pháp này không làm việc trong production.rb và test.rb file

set :deploy_to, "/var/www/mysite/live" 

Nhưng có một điều này:

set(:deploy_to) { "/var/www/#{application}/live" } 

nó một sự khác biệt tinh tế nhưng tôi nghĩ rằng một trong những mà các công trình thực sự chuyển thông tin như một khối Proc, trong khi cái đầu tiên là truyền nó như một chuỗi. Tôi có một nghi ngờ lén lút rằng vào thời điểm Capistrano Instance xuất hiện trong chuỗi đó không còn tồn tại nữa.

Điều này sẽ cho tôi biết rằng có điều gì đó không có trong tải của bạn hoặc yêu cầu thứ tự vì bạn có thể đặt các biến triển khai trong các tệp này. Nếu bạn không thể tìm nó ra bạn có thể lừa và bao quanh triển khai/production.rb hoặc triển khai/test.rb mã với

Capistrano::Configuration.instance.load do 
    # variables, etc here 
end 

Đó chắc chắn sẽ cho bạn biết rằng đây tệp không được tải trong phạm vi phiên bản Capistrano.

Cũng điểm nhỏ nhưng các tập tin phải ở trong

config/deploy # relative to your Rails app 

Không

/config/deploy/ # this is an absolute path off of your root folder 

Good Luck. Hy vọng rằng bạn đã giải quyết được vấn đề này!

+2

'set (: deploy_to) {"/var/www/# {application}/live "}' không hoạt động với capistrano 3.x. Tôi nhận được thông báo sau "sai số lượng đối số (1 cho 2)' – czerasz

+0

Cap 3 là một API IIRC viết lại hoàn chỉnh, họ đang cố gắng để làm sạch cơ sở mã kế thừa. Cú pháp này sẽ làm việc trong 2 mặc dù ... :) – engineerDave

-4

Có thể chỉ là thứ tự bạn có trong số deploy.rb? đặt yêu cầu trên các thiết lập giai đoạn

require 'capistrano/ext/multistage' 

# setup multistage 
set :stages, %w(testing production) 
set :default_stage, "testing" 
+4

Như đã giải thích trong trang wiki chính thức (https://github.com/capistrano/capistrano/wiki/2.x-Multistage-Extension) cho phần mở rộng nhiều tầng , 'require' ** phải ** xuất hiện sau hai' bộ'. – asymmetric

Các vấn đề liên quan