黑塞《德米安:彷徨少年时》

鸟要挣脱出壳。蛋就是世界。人要诞于世上,就得摧毁这个世界。

世上并没有偶然,如果一个人务必要得到什么,并最终得到了,这就不是偶然,而是他自己的功劳,他的意愿将他领向了那里。

对每个人而言,真正的职责只有一个:找到自我。无论他的归宿是诗人还是疯子,是先知还是罪犯——这些其实和他无关,毫不重要。他的职责指使找到自己的命运—— 而不是他人的命运——然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧。
『而自我是多元而丰富的。寻找自我时,跳出自我,并认识自我的能力,极其重要。不然必然会走入歧途。』

我不能自诩洞明世事。从过去到今天,我一直是一个寻觅者,但我已不再寻求于星辰和书本之间,而是开始聆听自己血液的簌簌低语。我的故事并不令人畅怀,也不像杜撰的故事那样甜美和谐,它味如痴语、混乱、癫狂和梦幻,就像所有那些不愿再自欺欺人的生活一样。

每个人的生命都是通向自我的征途,是对一条道路的尝试,是一条小径的悄然召唤。人们从来都无法以绝对的自我之相存在,每一个人都在努力变成绝对自我,有人迟钝,有人更洞明,但无一不是自己的方式。我们可以彼此理解,然而能解读自己的人只有自己。

我就像一棵秋天的树,树叶从它身边飘落,但它毫无知觉,雨水从它一旁滴落,还有太阳和严寒,生命已缓缓缩进了它内部最私密幽深之处。它没有死,它在等待。

渴望,对世界最热烈的接触,以狂野的方式与世界再度分离,对自我黑暗灵魂的热切聆听,对奉献的陶醉,对奇妙之物的深深好奇!

没有任何人去爱她, 没有任何人亲近她。 虽然她是个好人, 却也不愿走进任何人的内心。

我过去是,现在仍然是一个探索者,但是我不再占星问道,我开始倾听内心深处的低语。

“我们看到的事物,”皮斯托琉斯轻声道,“同时也是自己心中之物。真实无非就是心中的真实。因此,大多数人的生活都是不真实的,因为他们只将外界的景象当成真实,压抑了自己内心的世界。那样他们会幸福。可是,一旦人们了解了事情的另一面,他们就不能再选择庸人的路了。辛克莱,庸人的道路很轻松,我们的道路却很艰险——但我们愿意走。”

我没法赤裸裸、孤单单地站在世上,我也就是一条可怜巴巴的狗,需要一些温暖和食物,有时也希望有同类相伴。如果有人真的只追随自己的命运,那他就不再有同伴,他会完全孤立,身边是冷漠的世界。

一切都变了。我的童年已成废墟。父母看我的目光多了一层尴尬。姊妹们和我已变得非常疏远。一种豁然醒悟的感受让我所熟识的那些情感和乐趣都变得了无生趣,我闻不到花园的芬芳,对森林也毫不好奇,世界就像一堆廉价待售的旧货围绕着我,乏味无趣,书变成了纸,音乐则是噪音。

今天少有人懂得什么是人。很多人感觉到了这一点,因此死得更从容,当我写完这个故事之后,我也会同样从容地死去。

觉醒的人只有一项义务,找到自我,固守自我。沿着自己的路向前走,不管它通向哪里。

上帝借由各种途径使人变得孤独,好让我们可以走向自己。

恐惧中,我感到,他已经完全进入了自身中。我从来没有感到如此孤独,我不是他的一分子,无法触及他,天涯海角也没有他离我的距离那般遥远。

我做自己不情愿的事,是因为完全不知如何面对自己。我恐惧长久的孤独,害怕心绪的各种细微、羞涩和热切的波动,害怕那常常泛起的爱的柔情。

爱不必请求,也不可要求。爱必须成为自己明确肯定的力量。它便不再是被牵引,而是去牵引。

要是我知道爱是什么,那就是为了你的缘故。我在众人之中只爱你,你无法猜测这是什么意思。 这是表示沙漠中的泉源,荒野中开花的树,我的心不枯干,能够得神的恩宠,都是要感谢你的。

我常常考虑着未来的图景,我梦到可能会赠给我的角色,也许去做诗人或者去做先知,或者去当画家,或者随便什么。这一切都是一场空。我不是专门来作诗、布道、绘画的,无论我还是其他什么人都不能做到这些。这一切都只是顺便产生的。每个人的真正职业只有一个:走向自身。他可以以诗人或者疯子,以先知或者罪犯告终一一这不是他的事情,这终究是无关紧要的。他的事情是找到自己的命运,不是随便哪一个命运,并在内心充分享受它,完整而不间断地享受它。其他一切都是不完整的,都是企图逃脱,都是逃回中庸的理想,都是适应,是害怕自己的内心。

我一生中的一半是在对你求爱的,我知道你也喜欢我,可是我从不希望你会把这件事告诉我,因为你是个高傲的人。 现在你对我说了,在这一瞬间我什么都没有了,流浪与自由,世界与女人都舍我远去了。我要因此而感谢你。

使用Supervisor托管Laravel队列进程

supervisor的安装(Ubuntu 系统)

sudo apt-get install supervisor

supervisor的配置

一般配置文件在/etc/supervisor/conf.d 目录下
也可以运行这个命令可以生成一个默认的配置文件:

echo_supervisord_conf > /etc/supervisor/supervisord.conf

生成成功后,打开编辑这个文件,把最后的 include 块的注释打开,并修改如下:

[include]files = /etc/supervisor/*.conf

新增的 Supervisor 配置文件放在 /etc/supervisor 目录下,并且以 conf 结尾。

这时我们使用新的配置文件来启动 Supervisor:

supervisord -c /etc/supervisord.conf

如果提示已经有进程在运行,那么先 kill 掉它。

supervisor托管队列进程

首先在 /etc/supervisor 目录下新增一个 Supervisor 的配置文件,如下:
文件名laravel-worker.conf,和配置文件中指定的program保持一致

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=/usr/bin/php7 /home/vagrant/code/ccerp-v2/artisan queue:work --tries=3
autostart=true
autorestart=true
user=vagrant
numprocs=8
redirect_stderr=true
stdout_logfile=/var/log/supervisor/laravel-queue.log

这里 user 填写网站运行进程的用户,如 vagrant,numprocs 表示启动多少个进程来监听 Laravel 队列。
一切就绪后,我们使用如下命令就可以启动队列进程的监听了:

注意: 修改了配置文件以后都要进行 reload 和 update

supervisord # 先执行
sudo supervisorctl reload
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*
// 或者
sudo supervisorctl start all

在这一步,可能发生错误,提示如下:

laravel-worker:laravel-worker_00: ERROR (spawn error)
laravel-worker:laravel-worker_01: ERROR (spawn error)
laravel-worker:laravel-worker_02: ERROR (spawn error)
laravel-worker:laravel-worker_03: ERROR (spawn error)
laravel-worker:laravel-worker_04: ERROR (spawn error)
laravel-worker:laravel-worker_05: ERROR (spawn error)
laravel-worker:laravel-worker_06: ERROR (spawn error)
laravel-worker:laravel-worker_07: ERROR (spawn error)

解决过程:

  1. 把 Supervisor 的日志文件,和新增的队列配置文件中的日志文件,用 chown 把用户和组设置为正确的,如本例是 chown vagrant:vagrant file_name,把日志文件权限设置为 777。
  2. 另外一个问题,artisan执行报错,路径不能用相对路径,要用绝对路径(比如 /home/vagrant/Code/laravel/artisan,不能写成 ~/Code/laravel/artisan)

再次经过上述步骤,成功开启进程管理:

aravel-worker:laravel-worker_00: started
laravel-worker:laravel-worker_01: started
laravel-worker:laravel-worker_02: started
laravel-worker:laravel-worker_03: started
laravel-worker:laravel-worker_04: started
laravel-worker:laravel-worker_05: started
laravel-worker:laravel-worker_06: started
laravel-worker:laravel-worker_07: started

Laravel 5.5升级至5.7小记

修改 composer.json

 -        "tymon/jwt-auth": "1.0.0-rc.1"
 +        "tymon/jwt-auth": "1.0.0-rc.3"
 -        "fideloper/proxy": "~3.3",
 +        "fideloper/proxy": "^4.0",
 -        "laravel/framework": "5.5.*",
 +        "laravel/framework": "5.7.*",
 +        "laravel/horizon": "~1.3",
 -        "spatie/laravel-backup": "^3.0.0",
 +        "spatie/laravel-backup": "^5.0.0",

修改 packages.json

"devDependencies": {
 -        "axios": "^0.17",
 -        "bootstrap-sass": "^3.3.7",
 +        "axios": "^0.18",
 +        "bootstrap": "^4.0.0",
          "cross-env": "^5.1",
          "jquery": "^3.2",
 -        "laravel-mix": "^1.0",
 -        "lodash": "^4.17.4",
 -        "vue": "^2.5.7"
 +        "laravel-mix": "^4.0.7",
 +        "lodash": "^4.17.5",
 +        "popper.js": "^1.12",
 +        "resolve-url-loader": "^2.3.1",
 +        "sass": "^1.15.2",
 +        "sass-loader": "^7.1.0",
 +        "vue": "^2.5.17",
 +        "vue-template-compiler": "^2.5.21"
     },

修改 resources/assets/js/bootstrap.js

 -    require('bootstrap-sass');
 +    require('bootstrap');

修改 resources/assets/sass/_variables.scss

 // Body
 -$body-bg: #f5f8fa;
 -
 -// Borders
 -$laravel-border-color: darken($body-bg, 10%);
 -$list-group-border: $laravel-border-color;
 -$navbar-default-border: $laravel-border-color;
 -$panel-default-border: $laravel-border-color;
 -$panel-inner-border: $laravel-border-color;
 -
 -// Brands
 -$brand-primary: #3097D1;
 -$brand-info: #8eb4cb;
 -$brand-success: #2ab27b;
 -$brand-warning: #cbb956;
 -$brand-danger: #bf5329;
 +$body-bg: #f8fafc;

 // Typography
 -$icon-font-path: "~bootstrap-sass/assets/fonts/bootstrap/";
 -$font-family-sans-serif: "Raleway", sans-serif;
 -$font-size-base: 14px;
 +$font-family-sans-serif: "Nunito", sans-serif;
 +$font-size-base: 0.9rem;
 $line-height-base: 1.6;
 -$text-color: #636b6f;
 -
 -// Navbar
 -$navbar-default-bg: #fff;
 -
 -// Buttons
 -$btn-default-color: $text-color;
 -
 -// Inputs
 -$input-border: lighten($text-color, 40%);
 -$input-border-focus: lighten($brand-primary, 25%);
 -$input-color-placeholder: lighten($text-color, 30%);

 -// Panels
 -$panel-default-heading-bg: #fff;
 +// Colors
 +$blue: #3490dc;
 +$indigo: #6574cd;
 +$purple: #9561e2;
 +$pink: #f66D9b;
 +$red: #e3342f;
 +$orange: #f6993f;
 +$yellow: #ffed4a;
 +$green: #38c172;
 +$teal: #4dc0b5;
 +$cyan: #6cb2eb;

修改 resources/assets/sass/app.scss

 // Bootstrap
 -@import "~bootstrap-sass/assets/stylesheets/bootstrap";
 +@import '~bootstrap/scss/bootstrap';

修改 view 样式若干以适应bootstrap4

本文主要针对api框架进行更新,前端相关更新,命令此处忽略。

执行composer更新

composer update

Tips:

若composer update 报错:laravel/horizon v1.1.0 requires ext-pcntl *,请先将php版本升级到7.2*(php7.2版本自带ext-pcntl扩展)

Continue:5.7升级5.8小记

修改 composer.json

 "require": {
-        "php": ">=7.0.0",
-        "dingo/api": "v2.0.0-alpha1",
+        "php": "^7.1.3",
+        "dingo/api": "^v2.1",
         "fideloper/proxy": "^4.0",
         "gregwar/captcha": "^1.1",
         "guzzlehttp/guzzle": "^6.3",
         "guzzlehttp/psr7": "^1.4",
         "iwanli/wxxcx": "^2.0",
-        "laravel/framework": "5.7.*",
+        "laravel/framework": "5.8.*",
         "laravel/horizon": "^3.0",
         "laravel/tinker": "~1.0",
         "liyu/dingo-serializer-switch": "0.2.*",
         "mailgun/mailgun-php": "^2.5",
         "php-http/curl-client": "^1.7",
-        "spatie/laravel-backup": "^5.0.0",
+        "spatie/laravel-backup": "^6.0.0",
         "tucker-eric/eloquentfilter": "^1.2",
-        "tymon/jwt-auth": "1.0.0-rc.3"
+        "tymon/jwt-auth": "1.0.0-rc.4"
     },
     "require-dev": {
         "filp/whoops": "~2.0",
         "fzaninotto/faker": "~1.4",
         "mockery/mockery": "0.9.*",
-        "phpunit/phpunit": "~6.0"
+        "phpunit/phpunit": "^6.1.0"
     }