zoukankan      html  css  js  c++  java
  • ruby on rails笔记

    一、新建rails项目步骤:
    1.生成新项目
    rails new demo

    cd demo
    vi Gemfile
    末尾end前增加
      gem 'execjs'
      gem 'therubyracer'
     
    2.测试服务是否可用
    rails s -b 0.0.0.0
     
    3.配置root页面(可忽略)
    root to: redirect('/ccconsole/chart')
     
    4.配置数据库(可忽略)
    vi config/database.yml
    (1)sqlite3(默认)
    development:     
       adapter: sqlite3     
       database: db/development.sqlite3     
       pool: 5     
       timeout: 5000  
       
    (2)postgresql
    development:
      adapter: postgresql
      host: 9.186.88.100
      database: ccdb
      port: 5432
      username: postgres
      password: xx
      encoding: utf8
     
    二、rails生成空数据库
    (1)创建数据库(只需执行一次,可忽略)
    rake db:create
     
    (2)创建执行的migrate 表文件
    rails g scaffold book name:string
    注意:
    1.都是小写。
    2.如果你数据库创建了book这张表,他会报错。 
    3.scffold生成表,表名会变成复数。
    4.会自动生成id、created_at、updated_at字段。
    5.常用有的类型 integer string float boolean decimal text
    ruby是弱类型语言,对变量的定义不是很严格。
     
    (3)制动 在数据库创建表
    rake db:migrate RAILS_ENV=development
     
    其他:
    /config/routes.rb这个文件可配置路由。 
     
    3.
    生成model、controller、view
    rails g scaffold book name price:integer
    rake db:migrate RAILS_ENV=development
     
    用migrate方式修改数据:
    新建20170320141610_update_techspec_mapping.rb
    class UpdateTechspecMapping < ActiveRecord::Migration
      def change
        TechspecMapping.where(字段: '修改前的值').update_all(字段: '修改后的值')
      end
    end
     
    执行:    rake db:migrate VERSION=20120613163818
    回退:    rake db:migrate:down VERSION=20120613163730
    回退rails g scaffold 命令       rails destroy scaffold 表名
    看rails路径命令  rake routes
     
    rails命令:
    (1)生成model相关文件
    rails g scaffold compliancerun starttime:timestamp node server_num:integer
    (2)修改model
    rails g migration add_column_to_updatedresources cookbook:string
     
    rake db:seed 报错
    bundle exec rake db:migrate
    bundle update
     
    三、配置404,500等页面
    vi config/routes.rb
      get '500', :to => 'custom_errors#server_error'
      get '502', :to => 'custom_errors#server_error'
      get '504', :to => 'custom_errors#server_error'
      get '422', :to => 'custom_errors#server_error'
      get '404', :to => 'custom_errors#rescue404'

    四、rails项目目录结构(程序自动生成)
    1.app文件夹(rails的核心部分,也可以说存放的是针对项目的所有代码)
    包括6个子文件夹 
      assets       图片、js和样式表 
      controllers  驱动业务逻辑的控制器
      helpers      视图辅助类,一些常用的代码段
      mailers      与邮件服务相关的类
      models       数据描述结构、验证和完整性规则等模块
      views        生成html的所有模块文件,也可以存放css、图片
     
    2.public 存储rails应用的公共资源,如出错时的默认页和首页等。
    3.script 各种脚本,如代码生成器脚本。
    4.test 单元测试和功能测试
    5.vendor 程序依赖的外部类库,和lib一样都可以被自动加载。
    6.config 服务器、数据库或其他文件相依赖的配置文件
      database.yml 数据库配置
      ----adapter数据库连接库(适配器),默认sqlite3
      ----database数据库名称
      ----pool连接池数量
      ----timeout经过多少毫秒后服务器自动放弃连接,默认为5000ms。
    7.db 数据库脚本
    8.doc 文档
    9.lib 类库
    10.log 操作日志
    11.其他文件
    .gitignore 记录哪些是需要忽略,不需要追踪的文件
    config.ru 基于rack服务器的配置来启动应用程序
    Gemfile 允许我们指定哪些gem是rails应用程序所依赖的
    Rakefile 包含了一些可以在命令行下运行的作业
    README 包含了应用程序的简要说明 

    五、增加自定义页面方法
    (1)config/routes.rb
    get "detailreports" => "complianceruns#report"
    (2)controller中
    def report
      xx 
      render :report 
    end
    (3)  
    views/complianceruns/中新建report.html.erb


    六、rails task

    rake命令
    在项目lib/task中新建test.rb

    namespace :test do
      task :hello do
        puts 'hello'
      end
    end
     
    运行:
    rake test:hello

    七、rails发邮件
    1) update the /etc/postfix/main.cf by adding the following settings in the end:
    smtp_sasl_auth_enable = yes
    smtp_sasl_password_maps = static:用户:密码
    smtp_sasl_security_options = noanonymous
    smtp_tls_security_level = encrypt
    smtp_tls_CAfile = /etc/postfix/ssl/gd_bundle-g2-g1.crt
    header_size_limit = 4096000
    relayhost = [smtp.sendgrid.net]:587
     
       assuming to use sendgrid, and I had a trial account as specified in smtp_sasl_password_maps
     
    2) download the CA file specifed in 1)
          cd /etc/postfix/ssl
     
    3) restart the postfix
          /etc/init.d/postfix restart
     
    4) it may need to install a missing moduel
         yum install cyrus-sasl-plain
     
    1.Gemfile中增加 
    gem 'rake', '11.3.0'
     
    2.项目根目录运行
    rails g mailer UserMailer
     
    3.vi app/mailers/user_mailer
    增加
      default from: "xx@163.com"
      def send_mail(params = {})
        @url  = 'http://example.com/login'
        mail( :subject => 'abc',
              :to => "xx@qq.com",
              :from => 'xx@163.com',
              :date => Time.now
            )   
      end
     
    4.vi config/environments/development.rb
    增加
    ActionMailer::Base.delivery_method = :smtp
      config.action_mailer.perform_deliveries = true
      config.action_mailer.raise_delivery_errors = true
      config.action_mailer.default :charset => "utf-8"
      config.action_mailer.default_url_options = { :host => 'localhost:3000' }  
      ActionMailer::Base.smtp_settings = { 
    :address => "smtp.163.com", 
    :port => 25, 
    :domain => "163.com", 
    :authentication => :login, 
    :user_name => "xx@163.com", 
    :password => "xx"
      }  

    八、项目中增加bootstrap
    (1)、在Gemfile中增加 gem 'bootstrap-sass', '~> 3.2.0.2'
    (2)、bundle install
    (3)、把assets/stylesheets/application.css重命名为application.css.scss
    (4)、在这个文件中增加:
    @import "bootstrap-sprockets";
    @import "bootstrap";
    (5)、在assets/javascriptsheets/application.js中增加://= require bootstrap-sprockets
     
    九、分页
    will_paginate
     .paginate(:per_page => pageSize, :page => pageNumber)
     
    十、导出csv
    def export_to_csv
        logger.debug "whyrun report export start: #{DateTime.now}"
        startDateUnixTime = params[:startDateUnixTime]
        endDateUnixTime = params[:endDateUnixTime]
        searchString = params[:searchString]
        searchColumns = params[:searchColumns]
     
        if validate_date_in_millisecs(startDateUnixTime) || validate_date_in_millisecs(endDateUnixTime) || validate_string(searchString,'searchString') || validate_string(searchColumns,'searchColumns')
          return
        end
     
        options = {
            :startDateUnixTime => startDateUnixTime,
            :endDateUnixTime => endDateUnixTime,
            :searchString => searchString,
            :searchColumns => searchColumns,
        }
        whyrun_reports = WhyrunReport.search(options)
        logger.debug "write file start: #{DateTime.now}"
     
        time = Time.now.strftime('%Y%m%d%H%M%S')
        zipstream = Zip::OutputStream.write_buffer do |zos|
          zos.put_next_entry "Compliance_Check_Report_#{time}.csv"
          zos.print "Server, Platform, Start Time, Tech spec, Policy, Validation, Policy Attribute, Required Value, Current Value, Compliant, Action to Remediate, Environment, Profile, Description "
          for i in 0..whyrun_reports.length-1
            server = whyrun_reports[i]['server'] || ''
            platform = whyrun_reports[i]['platform'] || ''
            startTime = whyrun_reports[i].starttime.strftime('%Y-%m-%dT%H:%M:%S.%3NZ') || ''
            techspec = whyrun_reports[i]['techspec'] || ''
            environment = whyrun_reports[i]['environment'] || ''
            profile = whyrun_reports[i]['profile'] || ''
            description = whyrun_reports[i]['description'] || ''
     
            data = [server, platform, startTime, techspec, policy, validation, policy_attribute, requiredValue, currentValue, compliant, action_to_remediate, environment, profile, description]
            zos.print data.to_csv
          end
        end
        zipstream.rewind
     
        send_data zipstream.string, filename: "Compliance_Check_Report_#{time}.zip", disposition: 'attachment'
        logger.debug "export end: #{DateTime.now}"
      end
     
     
    Ruby on Rails 指南 (v5.1.1)
  • 相关阅读:
    分库分表的几种常见形式以及可能遇到的难
    一次非常有意思的 SQL 优化经历
    JavaScript 中 4 种常见的内存泄露陷阱
    专治前端焦虑的学习方案
    专治前端焦虑的学习方案
    [计算机视觉]图像直方图与直方图均衡化
    vector.erase用法注意事项
    [OPENCV]cvHoughLines2使用说明
    MarkDown教程
    GitHub用法
  • 原文地址:https://www.cnblogs.com/songfei90/p/10194920.html
Copyright © 2011-2022 走看看