ruby on rails筆記

1、新建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
 
2、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
 
3、配置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'

4、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 包含了應用程序的簡要說明 

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


6、rails taskjavascript

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

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

7、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"
  }  

8、項目中增長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
 
9、分頁
will_paginate
 .paginate(:per_page => pageSize, :page => pageNumber)
 
10、導出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 \n"
      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)
相關文章
相關標籤/搜索