为了提高本博客的访问速度, 前几天更换了vps, 于是昨天把博客搬家到新的vps上了。
一切看起来还不错。登录后台时发现后台清净了很多。
也没注意。
今天尝试安装另外一个插件时除了问题。 后台搜索插件:
wordpress无法安装插件,无法安装主题
第一反应是,文件夹权限不对。
于是, 后台去 chown, chgrp
一对权限加到最大。
最后发现,新站点php运行在安全模式下, 想到可能是安全模式权限不够, 于是关闭安全模式,问题解决了。
这个插件可在后台直接更改 safemode。
不用去修改php配置。
更新:
推荐大家一款便宜vps,kvm架构,128M只要5.99美元一年。 kvm架构的,你懂的,这是惊世骇俗的白菜价。
昨天刚发现的,顺手抢了两个, 一个做web,一个做mysql, 还不错。 说是过节做活动,不知道现在还有没有。
Micro-128
Self-managed
HDD: 3.0 GB
RAM: 128 MB
CPU: 1x Intel Xeon
BW: 300 GB/mo
可选择东西海岸机房。 我选的西海岸洛杉矶机房。
标称128M, 实际使用内存 148M。 良心啊。
我用的是联通网络你懂的,ping值维持在200上下:
支持openvpn, 你知道的。 5.99美元一年的白菜价, 你去买个v-p-n都不止这个价。
单独做站挂个博客绰绰有余。
我顺手抢了两个, 一个跑web, 一个做mysql。
其实还有两款更小的,恐怕只能用来爬墙了。。。 你懂的。
就不推荐大家了。
Micro-96
Self-managed
HDD: 2.0 GB
RAM: 96 MB
CPU: 1x Intel Xeon
BW: 200 GB/mo
Micro-64
Self-managed
HDD: 1.5 GB
RAM: 64 MB
CPU: 1x Intel Xeon
BW: 100 GB/mo
在Git如日中天的今天,不懂git都不好意思跟人说自己是程序猿。你是不是早就跃跃欲试了,只是苦于没有借口(契机)。 好吧,机会就在今天。 给我20分钟,是的,只要20分钟, 让你快速用上git。
我们废话不多说,直接来干货。
我们将会介绍一下几点:
一, 什么是git
二,使用git的一般开发流程
三,快速安装新建项目。holloword。
开始:
一,什么是git。
阅读本文的前提是你知道或者用过至少一种源代码管理工具,比如:SVN, CVS 或者TFS等等。 你必须知道什么是源代码管理。如果这些都不满足。请直接跳过本文。
了解陌生事物的最好办法,是和已知事物类比。 ---孔子
我们以svn为例。 我们都知道传统的源代码管理都是以服务器为中心的:
每个开发者都直接连在中间服务器上, 本地修改,然后commit到svn服务器上。
这种做法看似完美,但是有致命的缺陷:
1. 开发者不能本地跟踪代码版本。 所有的信息都是在服务器上。 你把本地的代码改了很多,但是又不能提交。通常,本地只能缓存一个版本。对于小项目无所谓, 但是项目一复杂,人员多就麻烦了。 通常你本地的代码都全是红色的。自己都不知道今天修改了什么, 有哪些修改是真正应该提交给svn的。
2. 因为第一点,一旦离开服务器, 程序猿将无法正常工作。 因为本地不能跟踪代码版本。 你的(几乎)任何操作都必须连上服务器。比如, show log, blame,show history等等。
3. 中央服务器压力过大。 因为每个人都必须把代码提交到服务器,并且做daily build。
4. 对于大型项目, svn几乎不可用。 例如linux内核项目, 开发者何止几万? 都直接提交给svn服务器的话还不乱套了。
5. 对于个人的私人项目而言(或者对于小公司的项目), 不用版本控制当然不行,但是为了用版本控制而专门假设svn服务器有有点舍不得。
有没有能解决上述几个问题的东东呢? 恩, 答案是肯定的。
Linux内核的作者也遇到了这些问题,于是他决定再一次改变世界, 重写一个可以本地使用的svn。
我们来看git的结构:
git没有中央服务器。 你装上git软件之后,你就可以指定本地的文件夹进行版本控制了。你可拔掉网线,然后在本地修改, commit,revert(rollback), branch, restore, show log, blame, history 等等, 全部你之前在svn里面可以用的操作。 简单的说,你就完美了。
我们看一个复杂一点的图:
开发者之间通过 pull和push操作, 把别人的修改拉过来,或者把自己的修改推给别人。
恩,你可能还是觉得有问题,我们生产 环境中, 以谁的代码为最终版本呢?
这个问题确实比较棘手,因为,从单纯的技术上将,每个开发者的机器都是对等的。 没有主次之分。
我们还有办法:
技术上不能解决的问题,我们从制度上解决. ---- 孟子
从分布式环境中我们模拟出一个中心来:
我们引入Leader这个角色。 他的机器是最终版本。 每个开发者都必须把最终的修改版push给leader。 leader会review然后提交。他就是最终版本。
恩, 我们好像还漏掉一个大问题, 说git,怎么漏掉了github呢。 github是什么。
我们知道,如果每个人都本地修改的话,本地可能不安全,(硬盘坏了,笔记本被偷了。。。。)
我们可能需要一个安全的服务器来存储/备份代码。对于开源的项目,可能是需要一个地方分享你的代码,你不可能24小时开着笔记本,让别人从你这pull代码。
于是, 网上所有的源代码托管网站就冒出来了。 github就是这样的。
看这个图, 我只修改了其中一个地方, 就是把leader的机器换成了。 github.com 提供的在线账户。
所以没有git和 github没有必然联系。
这里有几个常用的在线托管地址, 有兴趣自己看看:
1. github.com, 大名鼎鼎。 免费,只支持开源项目, 不支持私有项目。
2. bitbucket.com ,同样大名鼎鼎。 免费, 支持开源项目和私有项目。 免费用户最多5个。项目无限。
3. git.oschina.net, 国内顶尖托管平台, 我本人正在用的就是这个。 支持开源项目和私有项目。 成员无限, 项目1000个。 使用的是阿里云服务器, 速度极快。 本人推荐5颗星。
二, git开发的一般流程。
上面其实已经涉及了使用git的一般结构。 那么生产环境中, git是如何应用的呢。
本人知道的模型如下:
每个开发者都向自己的项目服务器(leader)提交代码, leader向公司服务器提交。 当然这个leader是可有可无的。如果项目小的话, 开发者可以直接向公司服务器提交。 公司的服务器就是最终版本。 一般公司还会有持续集成CI服务器。 我们可以在公司的源码服务器上设置git的hook。 自动触发CI服务器工作。 这是后话,不多说了。
三, 前面的概念弄清楚之后, 上手就容易多了。 我们helloword。
1. 这是git的官网:http://git-scm.com/ 去下载windows客户端。
如果是linux的话, sudo apt-get install gitcore
2. 注意, 官网的客户端都是命令行的。 命令行是高阶用法。不在这里说了。 我们下个gui。
我用的是TortoiseGit。 https://code.google.com/p/tortoisegit/ , 大家恐怕都熟悉svn时代的乌龟爬。上手快。 我们下面的操作都是gui上的。
安装过程不说了。 一路next。 我们跳过。 直接到最后。假设你现在已经安装完成了。
比如我已经有一个工程, helloworld:
这是工程文件的内部结构:
现在我们想让helloworld用上git怎么做呢, 在工程根目录下,点击鼠标右键。
选择 Create repository。
这个选项不要勾上。 稍后我们会解释什么是 Bare。
然后就完成了。
里面多出了一个 .git目录。 当前的目录(及其所有子目录)已经在git的监视之中了。 但是当前的代码还没有添加到git的跟踪数据库中。 简单的说,git还没有储存任何版本信息。 我们需要进行第一次提交:
git默认你本地会有一个主分支master。
我们写一些注释, 并且勾上想要添加到git的文件。 (如果有子目录的话, 它都会显示在这里。)
提交完成, close。 这个push按钮,稍后再说。
好了,这个时候我们在回到文件夹,看看有什么变化:
现在这些文件就添加进git了。
剩下的你就可以为所欲为了。 想svn一样,自己试试几个命令吧: 修改, difference, commit, revert,
到这你已经入门了。
最后我们来介绍两个重要的概念。
1. “git目录”, 就是指上图中,项目根目录下生成的 “.git” 文件夹。 用过svn的同学都知道, svn有‘.svn’文件夹。 他们的作用差不多。 这里保存了git的本地数据库资料。就是所有的版本信息。 跟svn不一样的地方就是,git中,只有根目录下有这个目录, 所有的子目录下都没有, 也就是每个工程只有一个.git目录。
2. “git工作目录”, 其实就是你的工程目录, 比如上图中的工程跟目录:H:\mycode\helloworld\ 。 问什么有这个工作目录呢。 就是你工作在这个目录下, 你可以修改编辑里面的文件,最后把修改提交给git目录。 这个共组目录还有一个神奇的地方就是, 你可以创建不同的branch(你默认工作在master下), 当你切换不同的branch时, 你的工作目录(工程目录)里的所有文件都会变成当前branch对应的文件。 这个不展开了。
最后再解释上面留下的两个问题:
1. “Bare” 创建Bare的意思是: 你只想要git的数据库(即上图中的 “.git”文件夹。), 而不想要当前的文件。 这通常用在公司的中央服务器上。 它不需要当前项目的实际代码,只需要保留git数据库信息就行了。
2. 在commit之后的对话框中的 push的意思。 正如之前介绍的。 push的意识是把你的修改push给别人(或者给公共服务器)。 commit的意思只是提交到本地的 .git 数据库。 并没有更新别别人。 所有提交完之后, 乌龟很贴心的给我们一个push按钮。 通过它你可以快速把刚刚的修改push给别人,或者给服务器。
总结, 这不是一本完全的git手册,但至少能让你消除git恐惧症,快速入手。
这里是gitbook的中文版: http://gitbook.liuhui998.com/ 他是真正的大而全。 为什么最后才说她呢? 因为它就像是一本 牛津大辞典, 全面,权威。 但是对于幼儿园小朋友学英语,就不能一上来就背它吧。 先跟着别人说,上手要紧。 之后有什么不会的,再去查字典。
好了。 就到这。 欢迎大家访问我的个人独立博客: http://blog.byneil.com 欢迎大家多多交流。
后面有时间的话,还想给大家分享一下我对几大源码托管服务器的经验。 希望大家顶啊。。。。
我使用的是Thinkphp 3.1.3, 也就是今天的3.1最新版本。 其实官方3.2已经正式发布了, 看了一下,改变比较多,而且不兼容,所以暂时先不升级了。
我配置了三个独立分组:
'APP_GROUP_LIST'=>'Home,Admin,SN', 'DEFAULT_GROUP'=>'Home', 'APP_GROUP_MODE'=>1,
我需要对其中一个分组使用单独的config.php
按照官方的文档:http://doc.thinkphp.cn/manual/group_config.html
--------------------------------------------------------------------------------------------------------------------
如果启用了模块分组,则可以在对每个分组单独定义配置文件,分组配置文件位于: 项目配置目录/分组名称/config.php 可以通过如下配置启用分组:
现在定义了Home和Admin两个分组,则我们可以定义分组配置文件如下: Conf/Home/config.php Conf/Admin/config.php 每个分组的配置文件仅在当前分组有效,分组配置的定义格式和项目配置是一样的。
-----------------------------------------------------------------------------------------------------------------
但是,不知道为什么就是不起作用,这问题困扰了我很久。 网上找到的所有答案都是从官方文档拷的,所以也一样。幸好Thinkphp是开源的。没办法,咱只有读代码了。
在Thinkphp/LIb/Core/Dispatcher.class.php 中找到 dispatch() 函数, 再找到大概 163 行,有个注释:
// 加载分组配置文件 if(is_file($config_path.'config.php')) C(include $config_path.'config.php');
这里就是在加载分组的独立配置文件了。
再倒回去10行左右, 找到 "$config_path" 的定义:
// 定义项目基础加载路径
define('BASE_LIB_PATH', (defined('GROUP_NAME') && C('APP_GROUP_MODE')==1) ? APP_PATH.C('APP_GROUP_PATH').'/'.GROUP_NAME.'/' : LIB_PATH);
结合这两个定义,可以知道,官方的文档说的是错的。 独立分组的配置文件正确的位置在:(以Admin分组为例)
Admin/Config/config.php
这个Admin就是你的分组目录, 不是在Config目录下新建的Admin目录。 全路径看起来应该是这样的:
/app/Modules/Admin/Config/config.php
打完收工。