2011-02-06 2 views
5

Моего мерзавец репо имеет свой локальный файл rvmrc в нем, и когда я раскрываю я хочу использовать другое имя РВМ gemeset и т.д.Как заставить capistrano записывать файл .rvmrc при развертывании?

Есть ли способ, что я могу сделать Capistrano создать файл .rvmrc (или overrite, если настоящее) всякий раз, когда я развертываю?

ответ

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

put документирована в Capistrano gitub repo

+0

ли "поставить" создает новый файл? А если нет: переопределяет ли файл или добавляет его? – user1291365

+0

См. Документы Capistrano для объяснения 'put' – zetetic

+6

Это больше не работает с Capistrano v3 – rposborne

1

Да, вы можете написать задачу грабли, чтобы написать файл .rvmrc, например, следующая команда рубин выполнит Баш скрипт, который записывает РВМ [email protected] в .rvmrc:

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

Моя рекомендация также заключалась бы в том, чтобы не хранить ваш файл .rvmrc в вашем репозитории git - этот файл действительно является системным файлом и может вызвать проблемы для других разработчиков, которые используют разные системные настройки, например, если они используют другой gemset, тогда в любое время они вытаскивают из центрального хранилища им придется перезаписать свои собственные файлы .rvmrc.

1

Это поздний ответ , но в соответствии с принятым ответом я создал задачу в пространстве имен rvm, чтобы выполнить задание. Он использует новый рубиново-версия:

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

Это создает .ruby-версию и .ruby-gemset, которая совместима с другими менеджерами версий Ruby –

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 
Смежные вопросы