亞馬遜服務器gem安裝插件遇到沒有權限的問題
在亞馬遜服務器上,我們的項目有可能會需要額外的第三方庫文件,如果是普通用戶(ec2-user)安裝插件時常會遇到沒有權限的問題,如果用sudo 獲取權限安裝的gem 下插件普通用戶沒有權限使用,在項目運行中就會報文件找不到的錯誤(一般是沒有權限獲取相應的插件文件),我在做ruby語言的項目時,就遇到這種問題。
在做IOS的push時,用了apns和houston ,在安裝時遇到了問題。
安裝apns #gem install apns
問題來了,我是普通用戶,在執行gem install apns 安裝插件時,報了這個錯誤
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions into the /usr/local/lib/ruby/gems/1.8 directory
說我沒有寫的權限,怎麼辦那,一般都是加sudo 命令即sudo gem install apns ,這個命令是能安裝成功,但是安裝後的插件的位置已經不是該普通用戶所在的/usr/local/lib/ruby/gem/1.8這個目錄下了,項目運行時,還是沒有讀取的權限,一般就會報文件找到不到的錯誤,還是不能解決問題。
如果你用這兩個命令
#sudo gem list
#gem list
你就會發現gem 列表中的插件是不同的,#sudo gem list 展示的是root(超級管理員)用戶下安裝的相關的插件,#gem list 展示的是ec2-user(普通用戶)下安裝的插件,而我們項目運行時,一般調用的都是普通用戶下安裝的插件,所以還是需要安裝到/usr/local/lib/ruby/gems/1.8這個目錄才行,怎麼辦那?
我解決的方法是 修改/usr/local/lib/ruby/gems/ 這個文件夾及其子文件夾的權限爲777即所有用戶都有可讀可寫可執行的權限。
命令#sudo chmod -R 777 /usr/local/lib/ruby/gems (爲了安全,安裝好以後在修改回來文件夾及文件的權限,你要無所謂不修改也沒有什麼,省的下次安裝還要再次修改了)
修改以後再執行
#gem install apns
#gem install houston
OK 一切解決了
提示:由於所安裝的插件有可能會被防火牆牆掉(換成淘寶的源),或者網絡不給力的情況,會出現安裝失敗的可能,多安裝幾次就能成功了,換源的方法也貼出來吧
1)添加源: sudo gem sources -a http://ruby.taobao.org/
2)移除原來的源: sudo gem sources --remove http://rubygems.org/
3)查看是否成功: sudo gem sources -l
(如果只有 http://ruby.taobao.org一個網址的話,證明更換成功)