本章将会从静态页面开始重构一个网站,以下是一些笔记记录
1)、rails newsample_app --skip-test-unit
上述命令中的--skip-test-unit选项的意思是让rails不生成默认使用的Test::Unit测试框架对应的test文件夹
2)、遇到问题
"Network error while fetching"
解决办法:遇到这类问题,一般都是代理配置的问题,以及source的写法的问题,确保这两者的配置没有问题一般就不会有问题
3)、bundle install –withoutproduction
我们使用该命令禁止安装生产环境所需的gem,这个选项运行一次一般会被记住,后续再次调用Bundle就不用再指定这个选项,直接运行bundle install就可以自动不安装生产环境所需的gem。
4)、config/initializers/secret_token.rb
动态生成权标:
require 'securerandom'
def secure_token
token_file = Rails.root.join('.secret')
if File.exist?(token_file)
# Use theexisting token.
File.read(token_file).chomp
else
# Generate a newtoken and store it in token_file.
token = SecureRandom.hex(64)
File.write(token_file, token)
token
end
end
SampleApp::Application.config.secret_key_base = secure_token
对于每一个新建的rails app都会获得一个很长而且是随机生成的secret token,当使用rails new的时候,他会被生成并保存在config/initializers/secret_token.rb,内容类似于以下:
WebStore::Application.config.secret_token=
'4f06a7a…72489780f'
因为rails自动创建secret token,所以很多开发者会忽略掉它。但是这个secret token就像是你的应用的管理员钥匙。如果你拥有了secret token,那样伪造会话和提升权限就会变得很容易。这是其中一个十分重要而且敏感的数据需要去保护的。加密是保护你的钥匙的最佳办法。
原文来自:http://www.oschina.net/translate/rails-insecure-defaults
4)、设置rails使用RSpec而不用Test::Unit,使用一下命令:
Rails generate repec:install
5)、创建控制器
Rails generate controller StaticPageshome help –no-test-framework
以上命令中的参数的意思是:禁止生成RSpec测试代码。
还可以通过命令来撤销操作,如以下命令:
Rails generate controller FooBars bazquux
Rails destroy controller FooBars bazquux
Rails generate model Foo bar:stringbaz:integer
Rails destroy model Foo
5)、通过以下命令来生成集成测试文件
rails generate integration_test static_pages
6)、通过运行以下命令来运行测试
Bundle exec rspec spec/requests/static_pages_spec.rb
7)、本章中使用到的几个gem包:
gem 'rspec-rails', '2.13.1'
gem 'guard-rspec', '2.5.0'
gem 'spork-rails', '4.0.0'
gem 'guard-spork', '1.5.0'
gem 'childprocess', '0.5.2'
使用Guard自动测试,使用rspec命令有一点很烦人,你总是要切换命令行然后手动输入的去执行命令测试。Guard会监视文件系统的变动,加入你修改了static_pages_spec.rb,那么只有这个文件中的测试会被运行,而且,我们可以适当的设置Guard,当被测试的文件发生变化的会自动去执行测试
8)、bundle exec spork --bootstrap
9)、bundle exec guard init spork
Spork和Guard一起使用时会很强大,我们可以使用以上命令进行设置。
修改完之后,我们可以通过Guard命令同时启动Guard和Spork
Bundle exec guard