发现在mac下同时开启有道词典与lightroom时,在lightroom中用触摸板调节属性参数时,会意外触发拷贝设置功能

解决办法就是暂时把有道词典关闭就可以了。这个比较坑啊,找了半天才发现是和有道词典有关系

出于速度的原因,把网站内容放到aws s3上了,之前放到github page上,发现速度不是很稳定,且有的时候出现不了能放问的情况

简单介绍下s3托管静态网站的使用

  1. 在s3上创建bucket,名子要和你的域名一样,如 www.youdomain.com

  2. 设置这个bucket,启动静态托管

  3. 登录你的域名后台管理平台,建立CNAME记录

    桶的根结点类似 www.youdomain.com.s3-website-ap-northeast-1.amazonaws.com

  4. 设置bucket的权限策略,添加新的策略,权限为公开,这样才能让别人访问你的网站内容

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "PublicReadForGetBucketObjects",
          "Effect": "Allow",
          "Principal": "*",
          "Action": "s3:GetObject",
          "Resource": "arn:aws:s3:::www.youdomain.com/*"
        }
      ]
    }
  5. 上传文件到s3

使用aws s3命令行工具进行上传

aws s3 sync . s3://www.youdomain.com --exclude ".git/*" --delete

# 参数delete的作用是:删除目标路径中,源路径不存的文件、文件夹

进入你的网站存放路径,输入以上命令,文件就会被同步到s3了,如果一切正常,你就可以通过你的域名进行访问了。当然,你也可以使用分配给你的桶路径进行访问

使用ssh-add命令可以把私钥添加到ssh-agent,当登录远程主机中的程序(如:git push)请求对应的私钥时,可以由ssh-agent把本地私钥发送给远程主机(启动这个功能要在ssh配置中设置 ForwardAgent yes)

添加私钥到ssh-agent

ssh-add /your_ssh_key_path
#=> Identity added: /Users/ga/.ssh/id

echo $? #查看是否添加成功
#=> 0 如果这里返回的不是0,则说明添加失败。如果你的key是加密的,在添加时还要输入密码

ssh-add -l #查看已经添加到ssh-agent中的key
#=> 2048 SHA256:9GlH51tb7Oxbxxxxxxxxxxxxxxxxxx

发现 Mac Air 右边(或左边)的USB接口在冷开机后,不能自动识别USB设备(极少的时候可以),但接上苹果自己的USB延长线,后就可以了,非常奇怪。网上说这是苹果的硬件设计所导致的,是硬伤。

目前发现的不能自动识别的设备有

  • 非苹果的键盘
  • U盘
  • 移动硬盘

PS: 这苹果的USB延长线官网卖140+一根,看来真是贵的有道理啊

在把博客迁移到Hexo后,发现不能被google收录,登录google webmaster后,发现是由于在迁移过程中产生了以下错误

  • 网址/tag/被迁移为tags/
  • 网址/categroy被迁移为categories

错误原因是hexo默认的标签和分类的名称为 tags、categories,而wordpress设置为tag、category,由于hexo使用是yelee主题,还需要修改它的标签云路径

要修改的文件

  • hexo的配置文件_config.yml
  • yelee的配置文件_config.yml及layout/_partial/page.ejs

hexo配置设置

/_config.yml
# 设置tag与category的目录 tag_dir: tag #tags改为tag category_dir: category
Read more »

把博客又从aws迁移到Hexo了,真是折腾啊,迁移中处理了几个问题

  1. 由于主题原因引起的单篇文章体积过大的问题
  2. highlight 代码块空白行不显示问题
  3. 图片迁移到七牛
  4. 对原有主题做了小小的修改。最最关键的是,不用为空间的事情担心了,因为已经全是不要钱的了

中国女排奥运夺冠,12年后再次夺得奥运会金牌,中国女排你最牛,为中国女排的姑娘们感动到自豪、骄傲,爱你们,你们是最棒的,各个都是大美女

女排夺冠

Read more »

搞了两天,终于迁移到docker了,docker确实优点挺多的,比如直接提供了应用程序的运行环境,当然还有很多,初次接触还不是很了解。这次迁移用到了两个docker:wordpress与mysql,使用这两个dock, 省去了安装mysql和php环境的工作

一下步的工作就是制作一个本站的docker image,这样以后随便放到那里就都可以使用了。

rails 启动后,会cached表的字段,如果在删除了某个字段,而没有重新启动rails,则rails依然加载这个字段,造成异常,开发模式也是如此

在苹果系统 xos 使用crontab定时任务时,出现/usr/bin/vi exited with status 1

解决方法

The issue turned out to be vi and nothing to do with cron. Doing export EDITOR=vim fixed it

用brew 安装 postgis (环境:postgre用的是mac版的postgre.app,psql用的是brew版的)

这样问题就来了,在安装postgis时,会查找psql,由于psql在/usr/sbin下,即用的是brew的,安装postgis时总是报错(具体错误大概是说不能解释postgre sql)。搞了半天没弄好。

决定把postgre.app的路径放到加载路径的最前面,/Applications/Postgres93.app/Contents/MacOS,放到路径最前面,再次安装postgis,一切安好。但undefined method `point’ for #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::TableDefinition:错误还是没有解决

# 如果key的数据类型不一致,会导致异常,其实这种情况已经不是第一次遇上了
# ArgumentError: comparison of Array with Array failed
hash = {c: 3, "a" => 1, b:2}

# 可以用hash#sort_by解决,把key统一成一致的数据类型
hash.sort_by{|k,v|k.to_s}
# 等效于
hash.sort_by{|h|h[0].to_s}
# 最终的输出结果为
#=> [["a", 1], [:b, 2], [:c, 3]]

method_missing 方法使用注意事项,其实最要应该注意的就是不能在method_missing 方法中出现找不到的方法,否则程序将掉入无限循环中

def method_missing(method, *args)
  not_exist_method #一个不存在的方法
end

# 当程序进入method_missing方法后,发现找不到not_exist_method方法,则又会掉入method_missing,然后又会发现找不到not_exist_method,然后又掉入method_missing,然后loop...

# 这种陷阱一般很难发现,所以在method_missing中编写代码时,一定要小心

可以调用to_sql方法察看实际ORM输出出來的SQL,例如Event.open_public.recent_three_days.to_sql

Post.where(author_id: 1).order("id desc").limit(3).to_sql
# SELECT  `posts`.* FROM `posts`  WHERE `posts`.`author_id` = 1 ORDER BY id desc LIMIT 3

向Scope传递参数

class Event < ActiveRecord::Base
    scope :recent, -> { |date| where(["created_at > ? ", date ]) }
    # 等同于 scope :recent, lambda{ |date| where(["created_at > ? ", date ]) }
    # 或 scope :recent, Proc.new{ |t| where(["created_at > ? ", t ]) }
end
Event.recent( Time.now - 7.days )

  • 如果你用gem install rake安装了10.1.0版本的rake(假设是最新的),当你直接使用调用rake时,使用的会是这个最新版本的rake。
  • 如果项目的Gemfile中指定的版本是0.9.6(或者是Gemfile.lock中是0.9.6)的话,你如果不加bundle exec,将会用rake 10.1.0的版本去执行本来应该由0.9.6版本的rake写出的Rake task。
  • 会不会出问题?可能会,可能不会。因为很有可能原作者使用0.9.6版本的rake写的Rake task中没有什么被废弃的部分,10.1.10也能正确执行。但是不兼容的情况也会发生。

bundle exec就是为了解决这样的问题而存在的:在目前的Bundle环境里执行某个操作,这样对于不同的人来说,不论系统里是什么版本的Gem,总是会使用该项目Gemfile中指定的版本来执行某个操作

其他
pry plugins 也可以裝一下,包括:

  1. pry-stack_explorer 輸入 show-stack 的話可以看到 call stack

  2. pry-debugger 可以加上 step, next, finish 和 continue 的控制

  3. pry-nav:也因為 binding.pry 太好用。

    社群也基於 Pry 繼續做了其他的 pry 的 plugin。最 killling 的就是 pry-nav。pry-nav 做的就是可以讓你在 binding.pry 的攔節點前後,作 next、step。直接一行一行的逐一 debug。相信我,如果你在寫通訊交涉的 Library,或者是正在改複雜的 Rails View

  4. pry-remote

    Pry 搭配 Rails,在往常的作法只有 rails s 可以叫出 debug console 而已。但很多人實際上是使用 Pow 作為開發用 HTTP Server。這樣的需求可以用 pry-remote 解決。pry-remote 的作法是把原本的 bindig.pry 改成 binding.remote_pry。而 binding.remote_pry 會開一支 DRb 起來,開發者再用 pry-remote 連到 debug console

  5. sinatra使用Pry

    pry -r ./application.rb #sinatra project, require  application.rb
    rails c # rails project
  6. pry 用法

    show-method 显示当前对象的源码
    show-method Author#hi 显示Author#hi方法的源码
    .pwd前面的.是调用shell的命令,而非pry的本身的方法

rake 实例变量作用范围,可以看到在task的block中,当前self为main,所以@people可以在say方法中访问。

desc "test instance variable"
task :hello_world => :environment do
  @people = "Jone"
  puts self #=>main
  def say
    puts self #=>main
    puts @people
  end
  say
end

#=>main
#=>main
#=>Jone

编译 ./configure --prefix=/srv/memcached/memcached145 --with-libevent=/usr/
需要安装 libevent ,安装时要确保知道安装路径

启动memcached
memcached -d -u root -m 200 -P /tmp/memcached.pid

安装redis
make PREFIX=/srv/redis/redis2815 install

启动:daemonize yes: Make redis run as a daemon
redis-server /usr/etc/redis.conf

安装postgresql,遇到问题:Can’t find the ‘libpq-fe.h header
解决方法:

  1. `gem install pg -v ‘0.18.1’ – –with-pg-config=/path/config

–with-pg=/path/pg –with-pg-lib=/path/2.yum install postgresql-devel最终用方法2解决yum list installed | grep postgres`

部署thin + nginx
生成配置文件

thin config -C /etc/thin/<config-name>.yml -c <rails-app-root-path> --servers <number-of-threads> -e <environment>

thin config -C /etc/thin/myapp.yml -c /var/rails/myapp --servers 5 --socket /tmp/thin.myapp.sock -e development

替换<config-name>为自己的应用名称,替换<rails-app-root-path>为应用的根目录,替换<number-of-threads>为启动的线程数,也就是启动多少个Thin服务,替换<environment>为运行环境。
thin:
environment: development
address: 0.0.0.0
port: 3001
timeout: 30
log: log/thin.log
pid: tmp/pids/thin.pid
max_conns: 1024
max_persistent_conns: 512
wait: 30
servers: 2
daemonize: true
# require: []

启动: thin start -C config/thin.yml
停止: thin stop -C config/thin.yml

nginx:

server {
     listen 3001;
     charset utf-8;
     root /var/rails/mysapp/public;
     access_log logs/access.log;
     error_log  logs/error.log;

     location / {
         # proxy_pass          http://rails_servers;
         # proxy_redirect      default;
         proxy_redirect      false;
         proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header    X-Real-IP $remote_addr;
         proxy_set_header    Host $http_host;
         proxy_next_upstream http_502 http_504 error timeout invalid_header;
         proxy_pass false;

        if (-f $request_filename/index.html)
        {
          rewrite (.*) $1/index.html break;
        }
        if (-f $request_filename.html) {
          rewrite (.*) $1.html break;
        }
        if (!-f $request_filename) {
          proxy_pass http://rails_servers;
          break;
        }
    }
 }
 upstream rails_servers{
        server 127.0.0.1:3002;
        server 127.0.0.1:3003;
 }