部署 部署并安装了 mini_magick 还是会报 Errno::ENOENT (No such file or directory - identify -quiet -ping /tmp/mini_magick20140417-15807-nbkvcn)

kloong777 · 2014年04月17日 · 最后由 kloong777 回复于 2014年04月17日 · 4236 次阅读

服务器部署完毕,并且安装了了 mini_magick 但是在上传图片用到 MiniMagick::Image.read(file_upload) 的时候报错了

Errno::ENOENT (No such file or directory - identify -quiet -ping /tmp/mini_magick20140417-15807-nbkvcn): app/controllers/teachers_controller.rb:63:in `upload_avatar'

难道是版本还是别的地方我没配好吗???

apt-get install imagemagick

可是已经安装成功了

#2 楼 @kloong777 终端下能执行 identify 么?

可以执行的

我这个里面还有上一个项目版本,是可以执行的,其中这一段代码就没有变。

img = MiniMagick::Image.read(file_upload) img.format("jpg") if file_upload.content_type =~ /gif|png$/i #把别的格式改为 jpg destination_dir = "avatars/teachers/#{Time.now.strftime('%Y-%m')}" rename_file_name = "teacher_#{current_teacher.id}" FileUtils.mkdir_p("#{Rails.root}/public/#{destination_dir}") if !Dir.exist? ("#{Rails.root}/public/#{destination_dir}") img.write "#{Rails.root}/public/#{destination_dir}/#{rename_file_name}.jpg"

就是这一段。

既然上个版本可以正常执行,这个版本不能执行,那么就对这两个版本 Diff 一下呗,看看变化,查出问题。问题不一定就直接出现在这里。

深度怀疑是环境变量问题,你在代码中输出 ENV['PATH'] 这个结果看看

No such file or directory - identify -quiet -ping /tmp/mini_magick 修改方法

在 nginx 配置文件里面加上 env PATH=/usr/local/bin:/usr/bin:/bin;

如果还是报错的话,可能是没有读取文件的权限,给项目级联加权限 chmod -R 777 /opt/projects/...

还不行就把下面这个加进 production.rb ​ ENV['PATH'] = "/usr/local/bin:#{ENV['PATH']}"

问题解决了,最后这个加进去好了 ENV['PATH'] = "/usr/local/bin:#{ENV['PATH']}" 可能是服务器环境不一样,以前配的没有这个也不会报错,谢谢你们的回复,问题解决了。

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