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