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 http://localhost:3000/ 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
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 wget https://certs.godaddy.com/repository/gd_bundle-g2-g1.crt 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 \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) https://ruby-china.github.io/rails-guides/index.html
cd demo vi Gemfile 末尾end前增加 gem 'execjs' gem 'therubyracer' 2.测试服务是否可用 rails s -b 0.0.0.0 http://localhost:3000/ 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
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 wget https://certs.godaddy.com/repository/gd_bundle-g2-g1.crt 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 \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) https://ruby-china.github.io/rails-guides/index.html