ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'employees.employees.emp_no' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

三种方式来解决。

一、关闭 ONLY_FULL_GROUP_BY
可以选择关掉 MySQL 的 ONLY_FULL_GROUP_BY 模式。

有两种方式,通过昨晚设置 sql_mode 来关闭。

首先查看变更前的 sql_mode:

第二种是找到 MySQL 配置文件修改并保存。

MySQL 的配置文件名为 my.cnf,可通过以下命令查看你位置:

$ mysql --help | grep cnf
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf

找到后编辑并保存,重启 MySQL 后生效。

ANY_VALUE()
还可以通过 ANY_VALUE() 来改造查询语句以避免报错。

使用 ANY_VALUE() 包裹的值不会被检查,跳过该错误。所以这样是可以的:

SELECT gender, 
-       last_name
+       ANY_VALUE(last_name) 
FROM   employees 
GROUP  BY gender 

添加列间的依赖
像这个示例中,

SELECT gender, 
       last_name 
FROM   employees 
GROUP  BY gender 

假如我们让 gender 变成不重复的主键,last_name 便与 gender 产生了一种关系,即 gender 可唯一确定 last_name。此时便可进行 GROUP BY 了。因为,之所以报错是因为在进行聚合的时候有不能确定的列参与了进来。

YII 1.1 要启用禁用 csrf
要在controlled的 beforeAction 方法中 设置 enableCsrfValidation 的值 ,如下:

public function beforeAction($action) {
 Yii::app()->request->enableCsrfValidation = true;
return parent::beforeAction($action);
}

ansible版本2.7,使用模块user

随机密码生成:https://suijimimashengcheng.bmcx.com/

说明:online 是ansible/hosts文件中配置的服务器组名称

一、此方法更新密码可以在history命令中看到明文密码,不推荐
ansible online -m raw -a "echo 'd1TSeVutHZ4I9aYw' | passwd --stdin root"

二、使用user模块更新用户密码:必需先把密码加密拿到加密后的字符串
生成密文密码:"msg={{ '密码信息(123456)' | password_hash('sha512','加密效验信息(随便写)') }}"

ansible 127.0.0.1 -m debug -a "msg={{ 'd1TSeVutHZccX9aYw' | password_hash('sha512','12545') }}"

批量修改线上密码(后面要用单引号不能使用双引号)

ansible online -m user -a 'name=root password=$6$12545$0P8BfZBHtdoY4HqTWYqJ2BDCgnCm.l4vW/ds2r35njYJuQ2zm4r4pBOx34iHQz71Op.UFC8C3m1.K6LXUQTkN. update_password=always'

GRUNT 添加COPY文件任务

npm install grunt-contrib-copy --save-dev
Gruntfile.js 配置文件中增加
module.exports=function(grunt){
    ...
    grunt.initConfig({
        ...
        copy: {
            main: {
                files: [{
                    expand: true,
                    cwd: 'jsCssSrc/js/',
                    src: ['*.min.js'],
                    dest: 'common/js/',
                },{
                    expand: true,
                    cwd: 'jsCssSrc/css/',
                    src: ['*.min.css'],
                    dest: 'common/css/',
                }]
            },
            build: {
                files: [{
                    expand: true,
                    cwd: 'jsCssSrc/coreJs/',
                    src: ['*.min.js'],
                    dest: 'common/coreJs/',
                },{
                    expand: true,
                    cwd: 'jsCssSrc/coreCss/',
                    src: ['*.min.css'],
                    dest: 'common/coreCss/',
                }]
            }
        },
        ...
    })
    
    ...
    grunt.loadNpmTasks('grunt-contrib-copy');
    ...
    
    grunt.registerTask('default',[...'copy:main',...]);
    
    ...
}

然后就可以执行
grunt copy:main
或者
grunt
就会执行default任务项启动 copy:main 任务