您正在查看: 技术Note 分类下的文章

php 相关 linux 命令

查找 php.ini 路径
php -i | grep "Loaded Configuration File"

git submodule 笔记

这次不造轮子,写写文章。file

最近想把自己的 blog 整理到 github 上,但由于其中依赖了一些主题以及插件,这时候 git submodule 就能很好的处理这种情况了。

submodule 是什么?

submodule 顾名思义,子模块。在一个项目依赖其他 git 上的模块时就很有用处了。

以我自己这次修改做例子:
我的 typecho 博客 依赖了 主题 typecho_material_theme插件 Links_for_Material_Theme

那写下来就写写整个过程。

冻手不?冻手file

准备

动手

开始增加子模块(最后为路径)

cd typecho
git submodule add git@github.com:HanSon/typecho_material_theme.git usr/theme/typecho_material_theme
git submodule add git@github.com:HanSon/Links_for_Material_Theme.git usr/theme/Links

这时候应该能看到开始对两个库 clone 中,查看一下 git status , 应该能看到修改的有多了两个库,以及 .gitmodules 的修改

git status

然后我们来提交到 github 中

git commit -am "增加子模块"
git push origin master

这时就已经成功提交到 github 上了,我们来看看 github 上是如何显示 submodule 的

file

可以看到多了两个不一样的图标,点击自动跳转去该仓库的地址(@ 后面代表的是 commit id)

来 pull

git clone https://github.com/HanSon/my-blog.git
cd my-blog

pull 完发现只剩下文件夹,submodule 并没有内容,需要先初始化 submodule 并且 update

git submodule init
git submodule update

这时候就发现 submodule 的内容已经 pull 下来了!

如果更新了 submodule , project 应该如何跟着更新?

  • 按需更新。 去到相对应的 submodule 目录执行 git pull origin master 即可。

  • 简单粗暴,全部更新。git submodule foreach git pull origin master

这次给我的博客加上了播放哈林摇的功能 http://hanc.cc

file

你还可以把上图的 Let's party 拖到书签栏,然后访问你想要摇的网站,点击刚保存的书签进行摇一下。file

PS:上面所述为实操后凭记忆记下来的,如有遗漏欢迎补充
file

cannot open .git/FETCH_HEAD: Permission denied 解决方式

这是因为当初的姿势不正确,导致 .git 文件夹为root用户所属

改回来即可

sudo chown -R $(whoami):admin .git

删除github上某个tag/release

github中删除release/tag只能在命令执行,不能界面点击操作

git tag -d [tag];
git push origin :[tag]

假若需要删除一个 v1.1.1 的release版本

git tag -d v1.1.1;
git push origin :v1.1.1

批量删除git分支

删除除了master外的本地分支

git branch | grep -v "master" | xargs git branch -D

laravel5.3的bug 无法在一个项目中使用多个同一数据库驱动

最近做项目掉进一个深坑,以至于一个小问题烦恼我两天以至于怀疑人生。

新项目需要连接两个mysql数据库,然而却出现无论如何也查询不了第二个数据库的情况。

经历了多次断点调试,google无止境搜索,询问印度阿三无果的情况下,也只能查看源码解决问题了。

最终发现在laravel的ConnectionFactory类的createConnection方法中有这么一段

protected function createConnection($driver, $connection, $database, $prefix = '', array $config = [])
{
    if ($this->container->bound($key = "db.connection.{$driver}")) {
        return $this->container->make($key, [$connection, $database, $prefix, $config]);
    }

    switch ($driver) {
        case 'mysql':
            return new MySqlConnection($connection, $database, $prefix, $config);
        case 'pgsql':
            return new PostgresConnection($connection, $database, $prefix, $config);
        case 'sqlite':
            return new SQLiteConnection($connection, $database, $prefix, $config);
        case 'sqlsrv':
            return new SqlServerConnection($connection, $database, $prefix, $config);
    }

    throw new InvalidArgumentException("Unsupported driver [$driver]");
}

$this->container->bound($key = "db.connection.{$driver}") 通过driver去跟容器做了绑定,也就是当你有第二个一样driver的数据库时,调用 $this->container->make()方法也会同样返回第一个绑定的 connection,这样无论如何也只能查询第一个了。

修改后

if ($this->container->bound($key = "db.connection.{$driver}.{$config['name']}")) {
    return $this->container->make($key, [$connection, $database, $prefix, $config]);
}

通过传入connection自定义的名称,能够避免重复

只可惜我提PR时对方表示5.3不作bug修复,很诧异。。。

PR在此
issue在此

elasticsearch出现SearchPhaseExecutionException的解决方案

在使用elasticsearch时出现了异常,显示SearchPhaseExecutionException[Failed to execute phase [query], all shards failed]

解决方案为curl -XPUT 'localhost:9200/*/_settings' -d ' { "index" : { "number_of_replicas" : 0 } } '

原文出处

团队中使用git的正确姿势!

最近换到新公司后,对git又有更加深刻的认识了,git能够非常好的解决团队开发,解决冲突(配合JB[jetbrains]效果更棒)

谨记

无论如何,请在分支上开发,保持分支是干净的,仅有你这次任务的代码!

fork到自己的项目中

fork到项目中,然后从clone自己fork下来的任务,这样就能保证你每次都会push到自己的项目中

增加团队项目的地址

之后假若遇到冲突,是需要重新拉去团队项目的最新代码的,以及在新任务开始时,都需要从团队的master中创建分支

增加一个项目源 git remote add org git:***** org为你组织的名称,随便起名即可

创建属于这次任务的分支

开始任务前,第一件事就是为你即将开展的任务创建分支 git checkout -b yourbranch(必须要从项目的团队上线分支上checkout出来,例:org/master)

开发完本次任务后,不要急着push!不要急着push!不要急着push! 重要的事情说三遍

先commit,这样就能记录你本次任务所修改的文件

切换回自己的测试分支

一般团队也会有测试的分支,直接checkout 团队的测试分支即可

合并分支

切换后需要把你的开发分支merge进来

push!

这时候可以push了,要注意的就是请确保你push的是自己的项目源,一般是 origin ,因人而异

提交PR

如果没有任何冲突,这里会很流畅的显示能够自动合并,下方显示修改的文件只有你自己所修改的文件

不能自动合并怎么办?

这是通常是因为有人跟你在测试环境中修改了相同的文件,只要在你自己的测试分支中重新pull一下(记得是pull团队的测试分支),然后IDE就让你修改冲突,只要你修改完后就能重新提交了。

Windows下配置vagrant homestead环境

自从公司使用了vagrant后,觉得无比的舒服,便花一天时间在家也配置了一下

准备工作

先下载以下文件

virtualBox这里我是下载5.0.24的版本,至于为什么不下载最新的5.1.0,因为装了之后总是提示下载最新版本,4.* , 5.0.* ,就是没有提及5.1.0,便下载了5.0中最新的版本。

以上文件除了virtualBox外皆为当前最新版本(2016-7-17)
PS:请务必使用迅雷下载,毕竟迅雷有加速buff(别问我如何使用迅雷下载,问这话我觉得你应该转行了)


- 阅读剩余部分 -

laravel 中 Facades的原理以及代码剖析

Facades

原理

In the context of a Laravel application, a facade is a class that provides access to an object from the container. The machinery that makes this work is in the Facade class. Laravel's facades, and any custom facades you create, will extend the base Illuminate\Support\Facades\Facade class.

A facade class only needs to implement a single method: getFacadeAccessor. It's the getFacadeAccessor method's job to define what to resolve from the container. The Facade base class makes use of the __callStatic() magic-method to defer calls from your facade to the resolved object.

简单来说,门面是通过一个魔术方法__callStatic()把静态方法映射到真正的方法上。

本文我们用Route来举例,

Route::get('/', function(){
    # 
}

- 阅读剩余部分 -