Skip to content

Instantly share code, notes, and snippets.

View tailang's full-sized avatar
💭
I'm busy

tailang tailang

💭
I'm busy
View GitHub Profile

跟着R哥来到了新公司(一个从硬件向互联网转型中的公司),新公司以前的代码基本是使用SVN做版本控制,甚至有些代码没有做版本控制,所以R哥叫HG做了一次Git分享,准备把公司所有的代码用Git作版本控制。平时自己虽然天天使用Git,但是总感觉知识有些零散,于是汇总了一些常用的Git命令。 ####常用配置

--system #系统级别
--global #用户全局
--local #单独一个项目
git config --global user.name "xxxx" #用户名
git config --global user.email "[email protected]" #邮箱
git config --global core.editor vim #编辑器

年后到现在,公司工作量突增,996的工作时长搞的我们各个身心疲惫(吐吐槽,工作还是要认真做的,哈哈)~~ 但平时几个好友还是会聚聚利用业余时间做一些有趣的东东。在最近的一个项目中,我们准备使用Rails+Grape的方案作为API服务,在开发的过程中,没有现成的task去获得已开发的API 路由(包括自定的路由显示格式)。如果只是使用Rails,我们可以轻松的使用rake routes罗列所有的路由,那如果搭载了Grape该咋办?其实我们也可以编写自己的task来实现... 首先创建一个task任务(假设项目名是atom):atom/lib/tasks/routes.rake

namespace :api do
  desc 'API Routes'
  task routes: :environment do
    Atom::API.routes.each do |route|  #这里的迭代后得到的route是Grape的路由对象,可以查看Grape源码
    #因为Grape本来就提供了route对象,我们本可以取出对应值直接打印就可以,但它提供的格式我不太喜欢,所以进行了重新拼接
      if route.route_path && route.route_method && route.route_version && route.route_path.include?(":version")
 http_method = route.route_method

一路过来也部署过3、4个Rails App了,其中也使用过mina等远程部署项目,但每次去部署新的App还是会遇到一些大大小小问题。最近和几个朋友正在做一个应用,在部署的过程中又被自己坑了~所以今天准备总结一下,方便自己未来的部署之路,也方便Rails新手学习使用。

#####环境说明 因为Linux的发型版太多,所以不能一一举例,经过自己的实践体验,发现Ubuntu可以更轻松的部署您的Rails App(个人看法,曾经在Centos下部署,遇到了好多坑)。所以该博文将基于以下的部署环境。

  1. 操作系统:Ubuntu14.04
  2. Rails:4.2.0
  3. Ruby:2.2.1
  4. Mysql: 5.6.22
  5. Nginx: 1.8.0
  6. Puma: 2.11.0

Masonary与UIScrollView一起使用方案

 UIScrollView *scrollView = [[UIScrollView alloc] init];
 scrollView.userInteractionEnabled = YES;
 scrollView.scrollEnabled = YES;
 scrollView.backgroundColor = [UIColor greenColor];
 [self.view addSubview:scrollView];
 [scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
     make.edges.equalTo(self.view);
@tailang
tailang / 获取launchImage.md
Last active April 11, 2016 11:08
获取launchImage
CGSize viewSize = self.window.bounds.size;
NSString *viewOrientation = @"Portrait";    //横屏请设置成 @"Landscape"
NSString *launchImage = nil;

NSArray* imagesDict = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"UILaunchImages"];
for (NSDictionary* dict in imagesDict)
{
    CGSize imageSize = CGSizeFromString(dict[@"UILaunchImageSize"]);
    
@tailang
tailang / 从web页面打开iOS应用.md
Last active June 2, 2016 08:44
从web页面打开iOS应用.md
@tailang
tailang / UIViewController容器.md
Last active June 22, 2016 09:05
UIViewController容器Demo
//
//  MenuChartsViewContainerController.m
//  CardApp
//
//  Created by tailang on 6/22/16.
//  Copyright © 2016 2dfire.com. All rights reserved.
//
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    UIButton *button = [UIButton buttonWithType:UIButtonTypeContactAdd];
    button.frame = CGRectMake(0, 0, 50, 50);
    button.tag = 1001;
    [button addTarget:self action:@selector(clickButton:) forControlEvents:UIControlEventTouchUpInside];

NSOptation 是一个抽象类,主要使用NSOpration的两个子类NSBlockOperation, NSInvocationOperation

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    NSBlockOperation *operation1 = [NSBlockOperation blockOperationWithBlock:^{
         NSLog(@"block 1 start");