2010-02-19 4 views
18

Tôi đang cố gắng thực hiện 'triển khai: lạnh' cho ứng dụng của mình. Git repo là địa phương để máy chủ triển khai của tôi (nghĩa là tôi chỉ có một máy chủ cho mọi thứ và tôi không lưu trữ mã của tôi trên github).Capistrano + Git: lưu trữ cục bộ vào máy chủ sản xuất

Dưới đây là bảng điểm (thay thế tên ứng dụng của tôi với "myapp" cho sự riêng tư)

* executing `deploy:cold' 
    * executing `deploy:update' 
** transaction: start 
    * executing `deploy:update_code' 
    executing locally: "git ls-remote /home/mrichman/git/myapp.git master" 
fatal: '/home/mrichman/git/myapp.git' does not appear to be a git repository 
fatal: The remote end hung up unexpectedly 
*** [deploy:update_code] rolling back 
    * executing "rm -rf /var/www/myapp.com/releases/20100218203108; true" 
    servers: ["myapp.com"] 
Password: 
    [myapp.com] executing command 
    command finished 
Command git ls-remote /home/mrichman/git/myapp.git master returned status code 32768 

Đây là deploy.rb tôi: http://pastie.org/831424

Tôi cũng đã cố gắng

set :repository, "[email protected]:/home/mrichman/git/myapp.git" 

nhưng điều đó mang lại cho tôi

ssh: connect to host localhost port 22: Connection refused 

Bất kỳ ý tưởng nào được đánh giá cao.

Trả lời

16

Chỉ cần chạy vào cùng một vấn đề. Điều quan trọng là không sử dụng bản sao deploy_via nhưng được đặt: local_repository

Điều này nên được đặt thành URL bạn sử dụng để truy cập kho từ máy tính/máy tính phát triển của mình.

Vì vậy, tôi có

set :repository, "file:///srv/git/myapp.git" 
set :local_repository, "nameOfHostFromSSHConfig:/srv/git/myapp.git" 

Dường như đã từng làm việc. Chỉ cần nhớ để sau đó loại bỏ các deploy_via dòng sao chép là tốt.

+0

Tôi hiện có các thông tin sau, cũng không thành công: thiết lập: kho lưu trữ, "tệp: ///var/git/myapp.git" bộ: local_repository, "localhost: /var/git/myapp.git" thực hiện cục bộ: "git ls-remote localhost: /var/git/hireexchange.git master" ssh: kết nối với host localhost port 22: Kết nối từ chối –

+1

Bạn đang phát triển trên cùng một hộp? Nếu bạn muốn tưởng tượng: local_repository, "file: //var/git/myapp.git" sẽ hoạt động. localhost nên được thay thế bằng bất kỳ tên máy chủ nào mà bạn kết nối từ máy trạm từ xa giả định của bạn. Ngoài ra tôi đã thấy rằng nếu bạn có submodules bạn sẽ chạy vào nhiều vấn đề hơn làm một triển khai như thế này, bởi vì các mô-đun được thiết lập để trỏ đến một URL từ xa. Rất khó chịu, nhưng có thể được giải quyết bằng cách sử dụng .ssh/config trên máy chủ của bạn theo người dùng bạn triển khai dưới dạng. – pmarsh

+1

Xin chào các bạn. Nếu nó làm cho bất kỳ sự khác biệt, git trên máy địa phương và từ xa của tôi yêu cầu các đường dẫn khác nhau, do đó tôi cần thiết lập: git_local/path/to/remote/git và thiết lập: git/usr/bin/git (lưu ý những điều này không yêu cầu ssh trong sự bắt đầu). – btelles

1

Đăng nhập như là người dùng của trang web mà bạn đang triển khai đến và đi thử này để xem liệu người dùng của bạn có quyền truy cập thư mục đó:

ls -LA /home/mrichman/git/myapp.git

Nếu bạn nhận được một Permission bị từ chối lỗi sau đó bạn sẽ phải chắc chắn rằng bạn thiết lập quyền trên các thư mục kèm theo của kho lưu trữ cho phép các kịch bản triển khai để truy cập các tập tin.

+0

Tôi đã xác minh rằng người sử dụng triển khai của tôi có đầy đủ quyền truy cập đọc đến /home/mrichman/git/myapp.git. Cảm ơn bạn đã bình luận. –

+0

Hãy thử đăng nhập vào tài khoản người dùng triển khai và nhập lệnh không thành công theo cách thủ công: "git ls-remote /home/mrichman/git/myapp.git master", nó có thể sẽ cung cấp cho bạn cùng một lỗi và nếu có, hãy đăng nhập là người dùng mrichman và dùng thử với tư cách người dùng đó. Nếu vẫn còn một lỗi, mà tôi đặt cược sẽ xảy ra, sau đó bạn sẽ muốn đi vào "/ home/mrichman/git/myapp.git "directory và type" git status "và nếu thất bại, bạn sẽ cần phải kiểm tra xem nội dung của thư mục đó có chứa git repository hay không. – rwl4

+0

Khi tôi thực hiện' git ls-remote' làm người dùng triển khai hoặc của riêng mình người dùng tôi xuất hiện để thành công: 'aa30ffc814fffd96b168ffec7224aeb9fe9df161 \t refs/heads/master'. Tôi tin rằng' git status' chỉ hoạt động trên cây công việc chứ không phải kho lưu trữ thực. Là một thử nghiệm, tôi đã đẩy repo của mình sang Codaset và Tôi có thể (và có lẽ nên) tiếp tục như vậy, vì nó là không an toàn để giữ SCM của một người trên máy chủ web của họ :) –

0

Đảm bảo rằng bạn đã viết đúng mã git repo với việc chăm sóc phân biệt chữ hoa chữ thường! (Tôi phải đối mặt với cùng một vấn đề, nó chỉ giải quyết)

0

Sự cố của tôi thực sự liên quan đến vấn đề đã biết của máy chủ. Tất cả những gì tôi phải làm là đảm bảo máy chủ git từ xa ở trong các máy chủ đã biết của tôi (lần đầu tiên thử SSH vào máy chủ) sẽ nhắc bạn tự thêm nó) và nó hoạt động như một sự quyến rũ.

0

Nếu local_repository được đặt, thì Capistrano sử dụng giá trị respository từ máy chủ triển khai và giá trị local_respository từ máy chủ phát triển. Or something like that.

cấu hình của tôi làm việc như vậy:

set :repository, "/home/#{user}/path/to/repo.git" 
set :local_repository, "myserver.com:path/to/repo.git"