我的git倉庫有我的地方rvmrc文件在裏面,當我部署我想用一個不同的RVM gemeset名稱等如何在部署時使capistrano編寫.rvmrc文件?
有沒有一種辦法可以讓Capistrano的創建.rvmrc文件(或者,如果overrite它現在)每當我部署?
我的git倉庫有我的地方rvmrc文件在裏面,當我部署我想用一個不同的RVM gemeset名稱等如何在部署時使capistrano編寫.rvmrc文件?
有沒有一種辦法可以讓Capistrano的創建.rvmrc文件(或者,如果overrite它現在)每當我部署?
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
是的,你可以寫一個rake任務寫一個.rvmrc文件,例如,下面的命令紅寶石將執行寫入RVM [email protected]到.rvmrc bash腳本:
system "echo 'rvm [email protected]' > .rvmrc"
我的建議也是不要將你的.rvmrc文件存儲在你的git倉庫中 - 這個文件實際上是一個系統特定的文件,可能會給其他使用不同系統設置的開發者帶來問題,例如,如果他們使用不同的gemset,從中央存儲庫他們將不得不重新編寫自己的.rvmrc文件。
被證明這是一個遲到的回答,但根據接受的答案,我已經創建了一個名爲空間的任務來完成這項工作。它採用了新的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
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
是 「放」 創建新的文件?如果不是:它覆蓋文件還是追加到它? – user1291365 2013-10-21 09:17:46
請參閱Capistrano文檔以瞭解對`put`的解釋 – zetetic 2013-10-21 21:20:29