RVM 大家帮忙看看哪里导致的权限问题~~

suffering · 发布于 2012年2月13日 · 最后由 jhjguxin 回复于 2012年2月13日 · 2578 次阅读
709

因为是Linux新手,所以在deploy ROR 项目中出现了很多乱七八糟的权限问题。大家帮忙看看看这中间到底是神马情况 注:文科专业转行自修,木有进过网络公司,木有入过团队。看到太2的地方,匆要骂得太凶... 除非必要,不要随意使用sudo安装程序我是知道的。但是却出现了很多诡异的情况:最近遇到的即是Paperclip-ImageMagick上传图片: 配置流程 安装RVM参照http://beginrescueend.com/rvm/install/

user$ sudo bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer )
sudo apt-get install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev  libssl- dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev  automake libtool bison subversion`
rvm install 1.9.3
rvm use 1.9.3 --default

安装Rails-Passenger-Nginx:

gem update --system
gem install rails
gem install passenger
passenger-install-nginx-module

安装ImageMagick:参照http://www.imagemagick.org/script/install-source.php

cd opt
wget http://www.imagemagick.org/download/ImageMagick.tar.gz
tar xvfz ImageMagick.tar.gz
cd ImageMagick-6.7.5
./configure
make
sudo make install

相关Gemfile

gem "mongoid", "~> 2.4"
gem "bson_ext", "~> 1.5"
gem "mongoid-paperclip", :require => "mongoid_paperclip"

相关Model:

class Product
  include Mongoid::Document
  include Mongoid::Slug
  include Mongoid::Paperclip
  field :name, :type => String
  field :specification, :type => String
  field :summary, :type => String
  field :data, :type => String
  belongs_to :category
  embeds_one :basicinfo, as: :infoable
  has_mongoid_attached_file :image,
  :styles=>{
    :small    => ['150x150',   :jpg],
    :medium   => ['250x250>',    :jpg]
  }
  slug :name
end

相关config:environments/development.rb && environments/application.rb

#...
Paperclip.options[:command_path] = "/usr/local/bin/"
#...

在development mode下一切没有问题上传图片的功能完全没有任何问题。 部署到服务器上,在devlopment mode下,通过emample.com:3000访问上传图片也没有任何问题。 但是在production.rb模式下,却无法上传任何图片: 程序提示我无法上传图片,...please install ImageMagick... 最后在log下查到根本paperclip根本没有办法写入图片。蛋疼了,于是:

chmod g+w,o+w /path/to/app/public/images -R
chmod g+w,o+w /path/to/app/public/system/images -R #图片上传路径

无果,再研究log,查资料...于是:

chmod g+w,o+w /usr/local/rvm/gems/ruby-1.9.3-p0/bin -R
chmod g+w,o+w /path/to/app/public -R

而后,问题解决了。 以前部署项目时都没有出现过这样的问题?同样的流程部署这次却出现权限问题? 为什么在development模式下没有出现问题而在production之下却出现了? 按理而言应该是nginx调用passenger模块再由passenger来调用rvm-ruby-1.9.3,再调用gem中的paperclip,再由paperclip来处理上传图片,并将之写入至本地文件系统之中,为什么paperclip会没有写入权限? nginx.conf的第一行#user nobody;我没有设置处于注释状态,因为这个的问题吗? 为啥我的rvm木有写入权限?难道不是用root权限安装的?

共收到 7 条回复
709
suffering · #1 · 2012年2月13日

@_@#木有人理~~

686
jhjguxin · #2 · 2012年2月13日

你使用的什么web服务器 apache 项目目录需要chown 到www-data 用户 再看一下 发觉我还没搞懂 楼上要问些啥

709
suffering · #3 · 2012年2月13日

#2楼 @jhjguxin 我用的nginx作为web服务器。 我要问的问题是: 以前部署项目时都没有出现过这样的问题?同样的流程部署这次却出现权限问题? 为什么在development模式下没有出现问题而在production之下却出现了? 按理而言应该是nginx调用passenger模块再由passenger来调用rvm-ruby-1.9.3,再调用gem中的paperclip,再由paperclip来处理上传图片,并将之写入至本地文件系统之中,为什么paperclip会没有写入权限? nginx.conf的第一行#user nobody;我没有设置处于注释状态,因为这个的问题吗? 为啥我的rvm木有写入权限?难道不是用root权限安装的?

686
jhjguxin · #4 · 2012年2月13日

你看看 你的项目目录 对 other 的权限是什么 你对当前用户 有添加rvm 用户组么 development一般是使用的当前登陆的用户 然而production 一般会由web server自建一个用户 而且 一般是放在www 目录下面的 www目录 当前用户默认是没有写权限的

686
jhjguxin · #5 · 2012年2月13日

jhjguxin@jhjguxin-virtual-machine:~$ sudo gpasswd -a root rvm Adding user root to group rvm jhjguxin@jhjguxin-virtual-machine:~$ sudo gpasswd -a jhjguxin rvm Adding user jhjguxin to group rvm jhjguxin@jhjguxin-virtual-machine:~$ sudo gpasswd -a www-data rvm Adding user www-data to group rvm

http://jhjguxin.sinaapp.com/2012/01/31/rvm%e5%b8%b8%e7%94%a8%e7%94%a8%e6%b3%95/

709
suffering · #6 · 2012年2月13日

#4楼 @jhjguxin 谢谢了~~ 问题应该就是出在这里了,确实没有做过组相关的设置

686
jhjguxin · #7 · 2012年2月13日

@suffering 能解决问题就好

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册