Установите umask для удаленных команд
Как я могу направить процессы, запущенные на удаленных машинах через ssh, для запуска с определенным umask? Я хочу, чтобы это также относилось к командам, выполняемым как часть стандартных рецептов Capistrano, поэтому я не могу просто сделать явный вызов части команды "umask".
Похоже, что ~/.bash_profile на удаленном компьютере не читается, так как Capistrano вызывает удаленные команды.
4 ответа
Я столкнулся с той же проблемой и обошел ее, используя недокументированные документы. SSHKit.config.umask
в config/deploy.rb
, Обратите внимание, что это установит umask
для каждой команды SSH.
Поместите umask 0002 в .bashrc учетной записи пользователя, которую вы используете для развертывания.
Ответ @beauby с использованием SSHKit хорош, но он работает только для Capistrano 3, так как Capistrano 2 не использует SSHKit.
Общая проблема по отношению к umask
и Капистрано это то, что bundle install
устанавливает драгоценные камни с разрешениями, которые являются слишком ограничительными. Для этой конкретной проблемы я нашел решение для Capistrano 2:
namespace :bundle do
task :postinstall do
run "chmod -R u=rwX,go=rX #{bundle_dir}"
end
end
after 'bundle:install', 'bundle:postinstall'
Договорились с Аленом - установите маску в свой .bashrc
вместо .bash_profile
, При развертывании с Capistrano в типичной настройке ваш .bash_profile
не загружается по умолчанию. Ознакомление с разницей между.bashrc и.bash_profile поможет понять цели обоих. У меня есть переменные среды, установленные в моем .bashrc
файл, и они, безусловно, используются при развертывании или для запуска любых других команд с capistrano.
Другой вариант - создать задачу для установки значения umask перед началом создания файлов при развертывании. Например, в Cap 3 вы можете использовать это:
task :set_umask do
on roles(:all) do |host|
execute "umask 0002"
end
end
before "deploy:starting", "set_umask"