明天好像有红色星期五,价格能优惠一点啊!
#24 楼 @flowerwrong 咦,好像可以了!估计是你那句改变权限发生作用了!
#24 楼 @flowerwrong 现在改 user 要改好多地方吧?会崩溃的啊……
#21 楼 @blacktulip 呜呜呜,好吧,回去先补补 linux 权限这一课,搞不懂哪……
#17 楼 @flowerwrong 哭…没看懂… 我用的是 capistrano3,它本身就有一句
set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system}
感觉更短更直接,我就没用你的fetch(:linked_dirs)
,但与你这句应该是等同的吧?
执行你说的命令,结果是
root@a_project:/home/a_project/current/public# ls -al | grep uploads
lrwxrwxrwx 1 root root 34 Jan 26 03:14 uploads -> /home/a_project/shared/public/uploads
因为我还没有上传任何图片,所以它现在目录是空的。但 carrierwave 应该会在上传时自动创建文件夹啊。因为在
photo_uploader.rb
中设置了
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
执行chmod 777 -R /home/a_project/shared/public/uploads
没输出任何结果,话说这句干什么的?
#16 楼 @blacktulip 是嘛?我就是觉得用 root 最省事啊,什么权限都有了……以前创建用户,动不动就说我没权限,我一偷懒,就什么都用 root 了……
#1 楼 @windwiny #2 楼 @awking #3 楼 @flowerwrong #5 楼 @liujianhei #11 楼 @Martin91 #12 楼 @googya #13 楼 @MrPasserby #14 楼 @libuchao
本来我猜是 capistrano 的问题,想到在不同版本应该共享 public/uploads 文件夹下的所有上传文件。所以,我在config/deploy.rb
中设置
set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system public/uploads}
所以目前,public/uploads 在服务器上是应该是 shared 目录下的。
# 看到当前deploy版本的确链接过去了
root@a_project:/home/a_project/current/public# ls -l
total 3340
-rw-rw-r-- 1 root root 1507 Jan 26 03:11 404.html
-rw-rw-r-- 1 root root 1508 Jan 26 03:11 422.html
-rw-rw-r-- 1 root root 1502 Jan 26 03:11 500.html
drwxrwxr-x 5 root root 4096 Jan 26 03:14 assets
-rw-rw-r-- 1 root root 2550 Jan 26 03:11 favicon.ico
drwxrwxr-x 2 root root 4096 Jan 26 03:11 images
-rw-rw-r-- 1 root root 202 Jan 26 03:11 robots.txt
lrwxrwxrwx 1 root root 33 Jan 26 03:13 system -> /home/a_project/shared/public/system
lrwxrwxrwx 1 root root 34 Jan 26 03:14 uploads -> /home/a_project/shared/public/uploads
# 看到这个目录的权限应该还是root
root@a_project:/home/a_project/shared/public# ls -l
total 8
drwxr-xr-x 2 root root 4096 Jan 21 22:48 system
drwxr-xr-x 2 root root 4096 Jan 26 03:12 uploads
可是,当我上传图片,还是会出错。查看 nginx 出错日志,还是说::Errno::EACCES (Permission denied @ dir_s_mkdir - /home/a_project/releases/20150126081307/public/uploads/tmp):
App 23466 stderr: Started PATCH "/admin/projects/1" for 54.64.229.171 at 2015-01-26 03:36:42 -0500
App 23466 stderr: Processing by Admin::ProjectsController#update as HTML
App 23466 stderr: Parameters: {"utf8"=>"✓", "authenticity_token"=>"xxx", "project"=>{"img_on_homepage"=>#<ActionDispatch::Http::UploadedFile:0x007f7fa0d1d630 @tempfile=#<Tempfile:/tmp/RackMultipart20150126-23483-1nxkjq0.jpg>, @original_filename="1-中国旅游信息化“十二五”发展规划项目.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"project[img_on_homepage]\"; filename=\"1-\xE4\xB8\xAD\xE5\x9B\xBD\xE6\x97\x85\xE6\xB8\xB8\xE4\xBF\xA1\xE6\x81\xAF\xE5\x8C\x96\xE2\x80\x9C\xE5\x8D\x81\xE4\xBA\x8C\xE4\xBA\x94\xE2\x80\x9D\xE5\x8F\x91\xE5\xB1\x95\xE8\xA7\x84\xE5\x88\x92\xE9\xA1\xB9\xE7\x9B\xAE.jpg\"\r\nContent-Type: image/jpeg\r\n">, "img_on_homepage_cache"=>""}, "commit"=>"更新", "id"=>"1"}
App 23466 stderr: ^[[1m^[[35mUser Load (0.7ms)^[[0m SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1
App 23466 stderr: ^[[1m^[[36mProject Load (0.4ms)^[[0m ^[[1mSELECT `projects`.* FROM `projects` WHERE `projects`.`id` = 1 LIMIT 1^[[0m
App 23466 stderr: ^[[1m^[[35m (0.2ms)^[[0m BEGIN
App 23466 stderr: ^[[1m^[[36m (0.2ms)^[[0m ^[[1mROLLBACK^[[0m
App 23466 stderr: Completed 500 Internal Server Error in 11ms
App 23466 stderr:
App 23466 stderr: Errno::EACCES (Permission denied @ dir_s_mkdir - /home/a_project/releases/20150126081307/public/uploads/tmp):
App 23466 stderr: app/controllers/admin/projects_controller.rb:29:in `update'
难道意思是,我要把/tmp 目录也放在共享下?可是不对吧?我 public/uploads 都 shared 了,那 public/uploads/tmp 应该就没问题了啊?
#5 楼 @liujianhei 不对啊,我是在网页端的表单上传的……如果用户上传不了东西,那应用还怎么叫应用呢?
#6 楼 @chanshunli 后来发现是因为我没有加上生产环境的密钥……
#29 楼 @alixiaomiao 这样是不是钻了空子,会不会不太厚道?
#2 楼 @flowerwrong 现在变 了……
#16 楼 @merlinran 哦,可是我已经刚把旧的主机删了,重新开了个空机……1G 内存的……
#12 楼 @blacktulip 原来这是与 DigitalOcean 类似性质的云服务器啊?那我暂时不考虑了,怕又有新坑…… 好不容易把 DigitalOcean 的坑体验一遍呢…… 我现在在考虑把现有的给删了,然后用个 1G 内存方案的那个,然后按小时计费……
#10 楼 @merlinran 因为我是照抄的 command,但其实不太理解……
$free -m
total used free shared buffers cached
Mem: 490 355 134 0 5 32
-/+ buffers/cache: 317 172
Swap: 255 254 1
$ sudo swapon -s
Filename Type Size Used Priority
/swapfile file 262140 261460 -1
$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 20511356 3240100 16206296 17% /
none 4 0 4 0% /sys/fs/cgroup
udev 240104 4 240100 1% /dev
tmpfs 50188 336 49852 1% /run
none 5120 0 5120 0% /run/lock
none 250924 0 250924 0% /run/shm
none 102400 4 102396 1% /run/user
$ sudo dd if=/dev/zero of=/swapfile bs=1024 count=256k
dd: failed to open '/swapfile': Text file busy
额,我知道了,512 内存的话,swap 文件最多也只能 1G……
额,我今晚是不是要回去啃啃那本《鸟哥的 LINUX 私房菜》?书买了好几年,还买了基础篇和服务器架构篇纸质版,死厚死厚,我都没耐心看过……
#5 楼 @blacktulip 咦,难道我现在就在小时计费?我当时明明选的是 5 美元方案啊! 而且好像也没有可以迅速扩容的方案耶……
#5 楼 @blacktulip 我这不是长期的,是暂时的,公司准备部署到阿里云上,然后财务走流程好像要很久,然后我现在就想暂时弄个地方。 想了想,我是不是应该弄个 1G 内存的方案,然后按小时计费? 但我已经用了 5 美元那个了,能退的嘛? VUTLR?我要找,哪里说到这个?什么来的?
#1 楼 @Rei
呜呜呜,我都不想要了这个 DO 了……考虑是不是现在去 linode 弄个 10 美元方案去……
只开一个实例是啥意思?我这各种弄顺了,一cap production deploy
又在assets:precompile
那断了……
话说,你知道那种什么 swap 把内存空出来的方案不? 我之前执行过一次How To Add Swap on Ubuntu 12.04
sudo swapon -s
df
df -h
sudo dd if=/dev/zero of=/swapfile bs=1024 count=256k
sudo mkswap /swapfile
sudo swapon /swapfile
swapon -s
现在想来第二次,结果不会了……
#5 楼 @blacktulip 哦,好啊,谢谢:),哈哈
#7 楼 @blacktulip 哈哈,因为我后台已经写好了,我就在后台从 new 页面创建这些文章啊……
#2 楼 @flowerwrong 其实内容也是我建的,不是在网上扒的。因为可能现在 development 在我本机,demo 放在一个机子上,正式部署又放在另一个机子上,所以想要把这些内容弄成 seed...