2015-11-19 51 views
0

我試圖將文件從源複製到目標,但副本與fileutils.rb:1402:in初始化'失敗:權限被拒絕@ rb_sysopen`。複製紅寶石文件作爲須藤用戶

目標文件是由根,那裏的腳本不同的本地用戶下運行擁有。如何以sudo root身份執行復制?

這裏是我當前的代碼

FileUtils.cp("#{Dir.home}/.user.crt", "#{'/opt/vagrant/embedded/.user.crt'}") 
puts "Copied cert file" 

遇到錯誤

fileutils.rb:1402:in `initialize': Permission denied @ rb_sysopen - /opt/vagrant/embedded/.user.crt (Errno::EACCES) 
+2

您應該以訪問這兩個目錄的用戶身份運行腳本 – Oleander

回答

0

您可以使用the sudo gem給單個對象sudo訪問。

require 'sudo' 
Sudo::Wrapper.run do |sudo| 
    sudo[FileUtils].cp("#{Dir.home}/.user.crt", '/opt/vagrant/embedded/.user.crt') 
end 

這比下提升的權限運行整個腳本更安全。

+0

感謝您的解決方案。 我試過這段代碼,但我得到一個新的錯誤 /opt/chefdk/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in'require':can not load這樣的文件 - sudo(LoadError) \t from /opt/chefdk/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in'require' \t from configure-env1.rb 109:在'

「 – Alex

+0

@Alex那晦澀的消息意味着你沒有[安裝須藤寶石(http://guides.rubygems.org/rubygems-basics/)。 – Schwern

+1

我安裝了sudo gem,現在一切正常。感謝您的解決方案。 – Alex