自定义 Rails 生成器和模板
建议学时:4 小时。
如果你计划改进工作流程,Rails 生成器是必不可少的工具。
使用 rails 命令创建应用时,使用的其实就是一个 Rails 生成器。创建应用之后,可以使用 rails generator 命令列出全部可用的生成器。
$ rails new myapp
$ cd myapp
$ bin/rails generate
你会看到 Rails 自带的全部生成器。如果想查看生成器的详细描述,比如说 helper 生成器,可以这么做:
$ bin/rails generate helper --help
定制工作流程
Rails 自带的生成器十分灵活,可以定制脚手架。生成器在 config/application.rb 文件中配置,下面是一些默认值:
config.generators do |g|
g.orm :active_record
g.template_engine :erb
g.test_framework :test_unit, fixture: true
end
使用脚手架生成资源时,如果不想生成默认的 app/assets/stylesheets/scaffolds.scss 文件,可以禁用 scaffold_stylesheet:
config.generators do |g|
g.scaffold_stylesheet false
end
其次,我们可以不让脚手架生成样式表、JavaScript 和测试固件文件。为此,我们要像下面这样修改配置:
config.generators do |g|
g.orm :active_record
g.template_engine :erb
g.test_framework :test_unit, fixture: false
g.stylesheets false
g.javascripts false
end
应用模板
生成器也可用于生成应用,这种生成器叫“模板”(template)。
下面是可供 Rails 生成器和模板使用的方法。
gem "rspec", group: "test", version: "2.1.0"
gem "devise", "1.1.5"
gem "devise", git: "git://github.com/plataformatec/devise", branch: "master"
gem_group :development, :test do
gem "rspec-rails"
end
add_source "http://gems.github.com"
add_source "http://gems.github.com" do
gem "rspec-rails"
end
inject_into_file 'name_of_file.rb', after: "#The code goes below this line. Don't forget the Line break at the end\n" do <<-'RUBY'
puts "Hello World"
RUBY
end
gsub_file 'name_of_file.rb', 'method.to_be_replaced', 'method.the_replacing_code'
application "config.asset_host = 'http://example.com'"
application do
"config.asset_host = 'http://example.com'"
end
application(nil, env: "development") do
"config.asset_host = 'http://localhost:3000'"
end
运行指定的 Git 命令:
git :init
git add: "."
git commit: "-m First commit!"
git add: "onefile.rb", rm: "badfile.cxx"
vendor "sekrit.rb", '#top secret stuff'
vendor "seeds.rb" do
"puts 'in your app, seeding your database'"
end
lib "special.rb", "p Rails.root"
lib "super_special.rb" do
puts "Super special!"
end
rakefile "test.rake" do
%Q{
task rock: :environment do
puts "Rockin'"
end
}
end
initializer "begin.rb", "puts 'this is the beginning'"
initializer "begin.rb" do
"puts 'this is the beginning'"
end
rake "db:migrate"
route "resources :people"
readme "README"
Rails 应用模板
应用模板是包含 DSL 的 Ruby 文件,作用是为新建的或现有的 Rails 项目添加 gem 和初始化脚本等。
用法
若想使用模板,调用 Rails 生成器时把模板的位置传给 -m 选项。模板的位置可以是文件路径,也可以是 URL。
$ rails new blog -m ~/template.rb
$ rails new blog -m http://example.com/template.rb
可以使用 app:template 任务在现有的 Rails 应用中使用模板。模板的位置要通过 LOCATION 环境变量指定。同样,模板的位置可以是文件路径,也可以是 URL。
$ bin/rails app:template LOCATION=~/template.rb
$ bin/rails app:template LOCATION=http://example.com/template.rb
Templates API
generate(:scaffold, "person name:string")
route "root to: 'people#index'"
rails_command("db:migrate")
after_bundle do
git :init
git add: "."
git commit: %Q{ -m 'Initial commit' }
end
|