一、新建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项目目录结构(程序自动生成)
四、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发邮件
七、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
八、项目中增加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)