2011-02-06 33 views

Trả lời

7

lệnh Capistrano của put có thể viết một tập tin từ một chuỗi, như thể hiện ở đây:

desc 'Generate a config yaml in shared path' 
    task :generate_yaml, :roles => :app do 
    sphinx_yaml = <<-EOF 
development: &base 
    morphology: stem_en 
    config_file: #{shared_path}/config/sphinx.conf 
test: 
    <<: *base 
production: 
    <<: *base 
EOF 
    run "mkdir -p #{shared_path}/config" 
    put sphinx_yaml, "#{shared_path}/config/sphinx.yml" 
    end 

Lưu ý: ví dụ nâng lên từ Making Your Capistrano Recipe Book

put được diễn tả trong Capistrano gitub repo

+0

là "đặt" tạo ra file mới? Và nếu không: Nó có ghi đè tệp hoặc nối thêm vào tệp đó không? – user1291365

+0

Xem các tài liệu Capistrano cho một lời giải thích của 'put' – zetetic

+6

này không còn hoạt động như của Capistrano v3 – rposborne

1

Vâng, bạn có thể viết một nhiệm vụ cào để viết một tập tin .rvmrc, ví dụ, lệnh của Ruby sau sẽ thực hiện một kịch bản bash mà viết RVM [email protected] để .rvmrc:

 
system "echo 'rvm [email protected]' > .rvmrc" 

Đề xuất của tôi cũng sẽ không lưu trữ tệp .rvmrc trong kho git của bạn - tệp này thực sự là tệp hệ thống cụ thể và có thể gây ra sự cố cho các nhà phát triển khác sử dụng các thiết lập hệ thống khác nhau, ví dụ như họ sử dụng một gemset khác từ kho trung tâm, họ sẽ phải viết lại các tệp .rvmrc của riêng họ.

1

Đó là một câu trả lời cuối , nhưng theo câu trả lời được chấp nhận, tôi đã tạo một tác vụ trong không gian tên rvm để thực hiện công việc. Nó sử dụng ruby-phiên bản mới:

after 'deploy:update_code', 'rvm:create_ruby_version' 

namespace :rvm do 
    task :create_ruby_version do 
    run "cd #{latest_release} && rvm rvmrc create #{rvm_ruby_string} --ruby-version" 
    end 
end 
+0

Điều này tạo ra .ruby-phiên bản và .ruby-gemset đó là tương thích với các nhà quản lý phiên bản Ruby khác –

2

put phương pháp không còn hoạt động tại Capistrano 3

Giải pháp này làm việc cho tôi

task :generate_yml do 
    on roles(:app) do 
    set :db_username, ask("DB Server Username", nil) 
    set :db_password, ask("DB Server Password", nil) 
    db_config = <<-EOF 
development: 
    database: #{fetch(:application)}_development 
    adapter: mysql2 
    encoding: utf8 
    reconnect: false 
    pool: 5 
    username: #{fetch(:db_username)} 
    password: #{fetch(:db_password)}  
test: 
    database: #{fetch(:application)}_test 
    adapter: mysql2 
    encoding: utf8 
    reconnect: false 
    pool: 5 
    username: #{fetch(:db_username)} 
    password: #{fetch(:db_password)} 
production: 
    database: #{fetch(:application)}_production 
    adapter: mysql2 
    encoding: utf8 
    reconnect: false 
    pool: 5 
    username: #{fetch(:db_username)} 
    password: #{fetch(:db_password)} 
EOF 
    location = fetch(:template_dir, "config/deploy") + '/database.yml' 
    execute "mkdir -p #{shared_path}/config" 
    File.open(location,'w+') {|f| f.write db_config } 
    upload! "#{location}", "#{shared_path}/config/database.yml" 
end 
end 
Các vấn đề liên quan