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

suffering · 2012年02月13日 · 最后由 jhjguxin 回复于 2012年02月13日 · 4325 次阅读

因为是 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 权限安装的?

@_@# 木有人理~~

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

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

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

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/

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

@suffering 能解决问题就好

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