2011-02-06 33 views

回答

7

Capistrano酒店的put命令可以寫一個字符串的文件,如下所示:

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 

注:例如擡離Making Your Capistrano Recipe Book

putCapistrano gitub repo

+0

是 「放」 創建新的文件?如果不是:它覆蓋文件還是追加到它? – user1291365 2013-10-21 09:17:46

+0

請參閱Capistrano文檔以瞭解對`put`的解釋 – zetetic 2013-10-21 21:20:29

1

是的,你可以寫一個rake任務寫一個.rvmrc文件,例如,下面的命令紅寶石將執行寫入RVM [email protected]到.rvmrc bash腳本:

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

我的建議也是不要將你的.rvmrc文件存儲在你的git倉庫中 - 這個文件實際上是一個系統特定的文件,可能會給其他使用不同系統設置的開發者帶來問題,例如,如果他們使用不同的gemset,從中央存儲庫他們將不得不重新編寫自己的.rvmrc文件。

1

被證明這是一個遲到的回答,但根據接受的答案,我已經創建了一個名爲空間的任務來完成這項工作。它採用了新的Ruby版本:

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 
2

put方法不再Capistrano的工作3

該解決方案爲我

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