librelist archives

« back to archive

bamboo上传模块路径相关设计方案的演变

bamboo上传模块路径相关设计方案的演变

From:
Tang Daogang
Date:
2011-07-30 @ 05:08
这段时间,一直为bamboo的上传的路径设计头痛。来回变了两次,于昨天终于找到貌似正确的方法了。现从头到尾总结一下:

最早的方案(方案一):

   1. 项目目录下有一个media符号链接,它链向的是$monserver_dir/sites/$project_name/这个目录;
   2. 真实的资源文件放在$monserver_dir/sites/$project_name/
   目录下,这是由于mongrel2的chroot特性决定的(chroot进入一个目录后,对这个目录之外的任何路径都看不到了);
   3. 路径仅用一个字段 path 存储;

方案一的缺点:

   1. 项目相关代码和文件(lua, html, js, css, images, ....)放在两处,管理上不太方便;
   2. 单独打包项目目录时,不会把js, css, images这些打进去,且解压这个目录时,tar命令会报错(虽然实际没有影响)。


为了解决方案一的第2个缺点,我辛辛苦苦设计了方案二:

   1. 去掉项目目录下的media符号链接;
   2. 真实的资源文件放在$monserver_dir/sites/$project_name/ 目录下;
   3. 通过项目的配置文件中的信息,在内部自动计算路径,得到了目录在磁盘上的绝对路径,以及给外部使用的url路径;
   4. 路径需用三个字段存储:path,
   相对于uploads目录的相对路径;url_path,给页面使用的path;absolute_path,给磁盘定位文件使用的path;

方案二的缺点:

   1. 项目相关代码和文件(lua, html, js, css, images, ....)放在两处,管理上不太方便;
   2. 代码的上层使用显得很复杂(path, url_path, absolute_path理解不清的话,很容易搞错);
   3. 由于暴露了绝对路径,这个路径中可能含有系统的一些信息,增加了风险;
   4. 数据库存储量增加。


昨天,咨询了mongrel2社区的各路大神后,得到一新方案:

   1. 项目目录下建立一个media目录,这个目录下放置真实的资源文件;
   2. 仍然建立$monserver_dir/sites/$project_name/ 目录;
   3. 使用mount -B  项目目录/media/
    $monserver_dir/sites/$project_name/,做重复挂载(这是个绝妙的把戏);
   4.
   
基于以上3点工作,代码可以回归到与方案一一模一样,即只需要一个path字段,这个字段里就存储media/uploads/xxxxx/xxxx.xxx这种字符串。

方案三保留了方案一代码简洁的优点,又克服了方案一的2个缺点和方案二的4个缺点,看起来是相当完美的了。

具体操作上,需要做3件事情:

   1. 转移资源文件($monserver_dir/sites/$project_name/下的所有东西)到工程目录的media目录;
   2. 做mount -B操作;
   3. 回归最初的上层代码。

All be ok.

-- 
Nothing is impossible.

Re: [bamboo] bamboo上传模块路径相关设计方

From:
顾锋
Date:
2011-07-30 @ 05:36
bamboo 对应的命令文件是不是也需要更新了?

在 2011年7月30日 下午1:08,Tang Daogang <daogangtang@gmail.com>写道:

> 这段时间,一直为bamboo的上传的路径设计头痛。来回变了两次,于昨天终于找到貌似正确的方法了。现从头到尾总结一下:
>
> 最早的方案(方案一):
>
>    1. 项目目录下有一个media符号链接,它链向的是$monserver_dir/sites/$project_name/这个目录;
>    2. 真实的资源文件放在$monserver_dir/sites/$project_name/
>    目录下,这是由于mongrel2的chroot特性决定的(chroot进入一个目录后,对这个目录之外的任何路径都看不到了);
>    3. 路径仅用一个字段 path 存储;
>
> 方案一的缺点:
>
>    1. 项目相关代码和文件(lua, html, js, css, images, ....)放在两处,管理上不太方便;
>    2. 单独打包项目目录时,不会把js, css, images这些打进去,且解压这个目录时,tar命令会报错(虽然实际没有影响)。
>
>
> 为了解决方案一的第2个缺点,我辛辛苦苦设计了方案二:
>
>    1. 去掉项目目录下的media符号链接;
>    2. 真实的资源文件放在$monserver_dir/sites/$project_name/ 目录下;
>    3. 通过项目的配置文件中的信息,在内部自动计算路径,得到了目录在磁盘上的绝对路径,以及给外部使用的url路径;
>    4. 路径需用三个字段存储:path,
>    相对于uploads目录的相对路径;url_path,给页面使用的path;absolute_path,给磁盘定位文件使用的path;
>
> 方案二的缺点:
>
>    1. 项目相关代码和文件(lua, html, js, css, images, ....)放在两处,管理上不太方便;
>    2. 代码的上层使用显得很复杂(path, url_path, absolute_path理解不清的话,很容易搞错);
>    3. 由于暴露了绝对路径,这个路径中可能含有系统的一些信息,增加了风险;
>    4. 数据库存储量增加。
>
>
> 昨天,咨询了mongrel2社区的各路大神后,得到一新方案:
>
>    1. 项目目录下建立一个media目录,这个目录下放置真实的资源文件;
>    2. 仍然建立$monserver_dir/sites/$project_name/ 目录;
>    3. 使用mount -B  项目目录/media/
>     $monserver_dir/sites/$project_name/,做重复挂载(这是个绝妙的把戏);
>    4.
>    
基于以上3点工作,代码可以回归到与方案一一模一样,即只需要一个path字段,这个字段里就存储media/uploads/xxxxx/xxxx.xxx这种字符串。
>
> 方案三保留了方案一代码简洁的优点,又克服了方案一的2个缺点和方案二的4个缺点,看起来是相当完美的了。
>
> 具体操作上,需要做3件事情:
>
>    1. 转移资源文件($monserver_dir/sites/$project_name/下的所有东西)到工程目录的media目录;
>    2. 做mount -B操作;
>    3. 回归最初的上层代码。
>
> All be ok.
>
> --
> Nothing is impossible.
>
>


-- 
顺祝 平安


-----------------------------------------------------------------------------------------
顾 锋 -- Gu Feng
网址:http://www.gufeng.net/
手机: +86-018980880032

-----------------------------------------------------------------------------------------
Network makes life better!

Re: Re: [bamboo] bamboo上传模块路径相关设计方

From:
道哥
Date:
2011-07-30 @ 13:19
已经更新了。

--
Nothing is impossible.


在 2011-07-30 13:36:30,"顾锋" <windkoo@gmail.com> 写道:
bamboo 对应的命令文件是不是也需要更新了?


在 2011年7月30日 下午1:08,Tang Daogang<daogangtang@gmail.com>写道:
这段时间,一直为bamboo的上传的路径设计头痛。来回变了两次,于昨天终于找到貌似正确的方法了。现从头到尾总结一下:


最早的方案(方案一):
项目目录下有一个media符号链接,它链向的是$monserver_dir/sites/$project_name/这个目录;
真实的资源文件放在$monserver_dir/sites/$project_name/ 
目录下,这是由于mongrel2的chroot特性决定的(chroot进入一个目录后,对这个目录之外的任何路径都看不到了);
路径仅用一个字段 path 存储;
方案一的缺点:
项目相关代码和文件(lua, html, js, css, images, ....)放在两处,管理上不太方便;
单独打包项目目录时,不会把js, css, images这些打进去,且解压这个目录时,tar命令会报错(虽然实际没有影响)。


为了解决方案一的第2个缺点,我辛辛苦苦设计了方案二:
去掉项目目录下的media符号链接;
真实的资源文件放在$monserver_dir/sites/$project_name/ 目录下;
通过项目的配置文件中的信息,在内部自动计算路径,得到了目录在磁盘上的绝对路径,以及给外部使用的url路径;
路径需用三个字段存储:path, 
相对于uploads目录的相对路径;url_path,给页面使用的path;absolute_path,给磁盘定位文件使用的path;
方案二的缺点:
项目相关代码和文件(lua, html, js, css, images, ....)放在两处,管理上不太方便;
代码的上层使用显得很复杂(path, url_path, absolute_path理解不清的话,很容易搞错);
由于暴露了绝对路径,这个路径中可能含有系统的一些信息,增加了风险;
数据库存储量增加。


昨天,咨询了mongrel2社区的各路大神后,得到一新方案:
项目目录下建立一个media目录,这个目录下放置真实的资源文件;
仍然建立$monserver_dir/sites/$project_name/ 目录;
使用mount -B  项目目录/media/  $monserver_dir/sites/$project_name/,做重复挂载(这是个绝妙的把戏);
基于以上3点工作,代码可以回归到与方案一一模一样,即只需要一个path字段,这个字段里就存储media/uploads/xxxxx/xxxx.xxx这种字符串。
方案三保留了方案一代码简洁的优点,又克服了方案一的2个缺点和方案二的4个缺点,看起来是相当完美的了。


具体操作上,需要做3件事情:
转移资源文件($monserver_dir/sites/$project_name/下的所有东西)到工程目录的media目录;
做mount -B操作;
回归最初的上层代码。
All be ok.


--
Nothing is impossible.





--
顺祝 平安


-----------------------------------------------------------------------------------------
顾 锋 -- Gu Feng
网址:http://www.gufeng.net/
手机: +86-018980880032

-----------------------------------------------------------------------------------------
Network makes life better!