一些技术问题的解决方案

解决方案

支持别人的网页嵌入自己的服务

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/X-Frame-Options

1
2
3
4
5
before_action :allow_iframe
def allow_iframe
response.headers.except! 'X-Frame-Options'
end

访问修饰符

Private Methods

So you can only call Private methods from the current context of the object, and you can’t call Private methods with a receiver, even if that receiver is self.

只能在当前实例里面调用,实例自己调用也是不行的,是这样理解么。 class 里面可以调用,instance.api_value就不行了。 self.api_value 也不行。

Protected Methods

However, if you call the method with self it will work:

So the important thing to note here is, you can call Protected methods inside the context of an object of the same type.

生成 8 位数字码

rand.to_s[2..9]

查看ssh key

➜ goldendata-api git:(master) cd ~/.ssh
➜ .ssh cat id_rsa.pub
ssh-rsa AAAAB3Nz…….

登录 uat 的数据库

登录到远程服务器
ssh 地址
进入到 项目的 目录:
cd /var/apps/project/
进入到 current 目录:
cd current
进入到rails console,做表的操作
RAILS_ENV=uat bundle exec rails c

压力测试

siege

参考: http://www.cnblogs.com/dw729/archive/2013/04/16/3024338.html
cookie 的校验
params 要是 encode 后的
在提交成功的页面的 header 中寻找 cookie 和 params
下面的 cookie 和 params 从提交成功的页面 network 里面可以看到。

1
siege -c 50 -r 100 -H 'Cookie:entry_token=ijMkkH; ...' "https://uat.jinshuju.net/f/aqo4ek POST utf8=%E2%9C%93&authenticity_token=%2BTnd349r652JPBzfKMzMv4aGljEMx2LP2tTfN29%2BBgVW2p0W7cfDVEUqHa2uuyMD0zOv%2BCc965yGpbwCBk%2FcIQ%3D%3D..."

siege -c50 -t60S -H ‘Content-Type: application/json’ ‘http://domain.com/path/to/json.php POST {“ids”: [“1”,”2”,”3”]}’

ab apache test:

参考 http://www.ha97.com/4617.html

postdata.txt 里面写 encode 后的参数
ab -n 4000 -c 2000 -T ‘application/x-www-form-urlencoded’ -p postdata.txt https://uat.jinshuju.net/f/x6fXZV

bootstrapvalidator

http://bootstrapvalidator.votintsev.ru/settings/

打开本地 redis

redis-cli

同事分享

https://workflowy.com/s/EuhH.J0gNr5G9LD

获取 ssh

  1. ~/.ssh
  2. cat id_rsa.pub

看测试ing 的 error

ctrl + t

查找

ps -x | grep elastic

git branch

删除远端 branch: git push origin –delete 67_exam_score
删除本地 branch: git branch -d 67_exam_score
把远端分支拉到本地 git checkout --track origin/daves_branch

snipaste

截图什么的。

gemset

查看当前所有的 gemset 和 当前使用的 gem 管理空间

rvm gemset list

.ruby-gemset 里面有我这个 项目使用的 gem 管理的 文件夹。
ls -al 可以看到有 .ruby-gemset

点一遍 所有的页面 按钮

1 to 01

sprintf ‘%02d’, 1

查看进程

ps -x | grep elastic

杀死进程
kill -9 390

启动 es
➜ bin ./elasticsearch -d

mini test

m test/controllers/entries_controller_test.rb:130

RUN_COVERAGE=false rake

自定义 bootstrapValidator 验证器

http://www.itdadao.com/articles/c15a302743p0.html

部署后登录错 uat 环境了,所以看到代码一直没变,哎,下次遇到这种问题,要想想

api 部署被覆盖,所以代码没有生效

撤销 commit

git reset –hard c9a9eec9c9b39f7522b9098deada053f1cca0e63
HEAD is now at c9a9eec Merge branch ‘master’ into dev

git push -f origin dev

git branch 命名有特殊字符,会 push 不上去

通过 git branch -a 可以查看当然的分支及远端分支
git checkout 到去掉特殊字符的分支,然后重新 push ,这个可以把当前分支的commit 也一起commit 到新的分支,不用担心漏掉。

git status 的时候,有一些没有清除的操作,是之前 rebase 的时候没有操作完全,后面又merge了吧

所以 现在解决是通过 git rebase –continue 一个一个的把 Next commands to do (2 remaining commands) 搞到 Last commands done (7 commands done) 这样才能把之前 rebase 停止的部分一个个解决掉,每 continue 一次,检查一下 git status看有没有冲突,有冲突解决一下 。(rebase 的时候,如果有 commit 冲突,就会在那个commit 停止,要把后面的一个个 continue 才能 完成这些操作。)

在本地 image 不加 .png 这种文件后缀是不会报错的,但是到了 uat 或者生产环境就会有错。猜想有可能是 assets pipeline 加密的时候有问题,所以没办法正常使用。

使用 asset_path(“themes/background/#{template[:name]}.png”) 可以拿到加密后的图片,在js中使用

gitk 可以调取查看git的窗口

jquery unshift

matchFields.unshift({id: ‘x_field_1’, text: ‘扩展属性’})
这个结果返回的是 插入的 index,而不是 matchFields

1
2
3
4
5
6
$(document).on 'turbolinks:load', ->
return unless $(".app-publish-container").length
ZeroClipboard.destroy()
$copyCheckinUrlDom = $("#copy_checkin_url")
new ZeroClipboard $copyCheckinUrlDom
$copyCheckinUrlDom.on 'click', -> App.View.showFlashNotification('复制网址成功')

自定义 jquery-validate

gd-rt-lottery 中有 callback
code-verify 中有 自定义验证器

rails 异步执行

http://edgeguides.rubyonrails.org/active_job_basics.html

Zen Rails Security Checklist

https://github.com/brunofacca/zen-rails-security-checklist

考试0秒问题

这个bug也是解了很久,但是我没有解决掉。
但是通过观察,可以发现,在 safari 中第一次打开浏览器是很容易出现 0 秒的。
后来定位到问题是 safari 在写跨域请求的时候,如果你之前没有访问过应用的链接,在往应用链接下写 cookie 的时候是不 work 的,在清除 safari 历史记录之后,百分百重现 0 秒。
因此,问题找到。解决方案就是,要在考试提交前,访问一次应用的链接。

  1. 第一种想法是自己偷偷在这个应用 controller 中访问,但是是不可行的,safari 记录的貌似是浏览记录。
  2. 增加了考前必读,让用户先从 应用中进入考试的表单,这样提交的时候就可以跨域写 uid 了。

性能问题总结

背景:企业版应用授权反应十分慢。
初步疑惑:个人版和企业版代码是一样的,为什么企业版就慢了?
先是查看代码,是不是代码本身问题,但是记录日志时间相差都很小,可以确定不是代码问题。
后来讨论之后,还是觉得部署环境有问题

  1. 排除了一下代码的可能性。
  2. 继续跟进,去找企业版,看api处理速度,企业版api也没问题。

  3. 给出解决方案:在 uat (因为uat也是很慢的)

    1. 写一个很简单的 controller 去访问 curl,看看是不是最简单的代码都慢,如果最简单的都慢,就可以十分肯定不是代码的问题。
    2. 不是代码的问题就是环境的问题,就得配合豪哥看到底是哪块的问题。
  4. 配合发起请求,在此这过程中本可以锁定问题,但是因为在一个环节理解错了,没有定位出来。
    后来豪哥也是想了好几天才又一次执行错误理解的部分,结果证明确实是这里的问题,(这一块也主要想企业版环境和个人版到底有何不同)。
    是因为 css 等要先经过 dns 解析还是什么?去掉这块指向就快了。

总结是:固定一些条件,排除可能性。不要一开始认怂。不是代码的问题也要去跟进问题,毕竟问题总是要解决的,不然留给谁?

让单词别自动分开

加上样式
word-break:break-all

中间打点

http://stackoverflow.com/questions/7023545/truncate-string-with-rails

es task

rake es:form:reindex[20160801,20170901]
rake es:entry:reindex_all
rake es:contact:reindex_all

把这几个跑了之后,才能数据同步到es,es的搜索才能正确执行

backbone el

backbone 的 view 如果指定了 el,就是特定的el,如果没有指定,默认会给一个空的 div 作为 el

by default, backbone view’s el is set to an empty div. so, this.el and this.$el are always present.

可以把 多个空格 格式化成一个空格

‘aa bb cc’.squish!

把所有的 ; 替换成 ;

$textFieldDom.val().replace(/;/g, ‘;’)

rails 获取 ip

1
2
3
4
5
6
7
8
9
def request_real_ip
return @request_real_ip if instance_variable_defined? :@request_real_ip
raw_ip = cname_request? ? request.env['HTTP_X_REAL_IP'] : (request.env['HTTP_X_FORWARDED_FOR'] || request.remote_ip)
@request_real_ip = raw_ip ? raw_ip.split(',').first.strip : nil
end
def cname_request?
request.env['HTTP_X_JSJ_FROM'].present?
end

如果没有权限建 rep ,那么fork 是 fork 到了自己的公开地址

转换 csv 为 xlsx

https://convertio.co/csv-xlsx/