Padrino 生成器指南
英文版出处:http://www.padrinorb.com/guides/generators
Padrino提供了用于快速创建应用的生成器,其优势在于构建推荐的Padrino应用结构、自动生成罗列了所有启动依赖项的Gemfile并提供帮助菜鸟尽快上手的指南。
生成器一个重要的特点就是它们被从头建立来支持你的Padrino应用中涉及到的大量工具、类库和Gems。
也就是说,Padrino生成器并不限制你使用任何数据库、对象关系映射、测试框架、模板引擎或JavaScript库。事实上,在生成应用的时候你就可以告诉Padrino你想用哪些组件。
项目生成器
项目生成器的使用方式相当简单:
$ padrino g project <the_app_name> </path/to/create/app> --<component-name> <value>
而生成基本应用的最简单的命令莫过于:
$ padrino g project demo_project
该命令在当前目录的demo_project文件夹下创建一个继承自Padrino::Application的Padrino应用,该应用已经为您配置好了默认组件。
如果你有特殊需求,则可以按如下设置:
$ padrino g project demo_project -t rspec -e haml -m rr -s jquery -d datamapper -c sass
你也可以指定生成器跳过某个特定的组件(或者采用你自己的):
$ padrino g project demo_project --test none --renderer none
你还可以用 --app 参数为你的核心应用设置别名:
$ padrino g project demo_project --app alternate_app_name # alias -n
新建应用时,生成器用bundler包管理程序来处理依赖程序,当你添加了 --run_bundler参数,生成器会自动执行必要的bundler命令:
$ padrino g project demo_project --run_bundler # alias -b
如果你想手动搞定,那就在生成的应用根目录里打开终端,执行bundle install命令。
基本项目里面有很多关于如何使用项目生成器的栗子,欢迎来摘哦!
生成器框架是可扩展的,用户可以很轻易地为其添加组件和工具。
如果你对此感兴趣,可以在我们的项目上建立分支,阅读lin/generators/project.rb里的代码,并在lib/generators/components里的相关文件里创建指令。我们非常乐意接受第三方组件类型的推送请求(协助维护也求之不得)。
项目生成器的一些有效配置选项:
选项 |
默认值 |
参数 |
介绍 |
bundle | false | -b | 安装bundler依赖项 |
root | . | -r | 项目根目录路径 |
dev | false | none | 从本地git签出使用边缘版本 |
app | nil | -n | 指定与项目名不同的应用名 |
tiny | false | -i | 生成微型项目骨架 |
adapter | sqlite | -a | 指定对象关系映射数据库适配器 |
有效组件及其默认参数设置如下:
选项 |
默认值 |
参数 |
介绍 |
orm | none | -d | mongoid, activerecord, datamapper, couchrest, mongomatic, ohm, ripple, sequel |
test | none | -t | bacon, shoulda, cucumber, testspec, riot, rspec, minitest |
script | none | -s | prototype, rightjs, jquery, mootools, extcore, dojo |
renderer | haml | -e | erb, haml, slim, liquid |
stylesheet | none | -c | sass, less, scss, compass |
mock | none | -m | rr, mocha |
注意:在使用生成器时,项目名、模块名和控制器名不要重名。比如,不要将你的应用命名为Posts,同时又将你的控制器或者子应用也命名为Posts。
一堆栗子
创建与项目不同名的应用:
$ padrino g my_project -n blog
这将在my_project/路径下生成项目,并且应用会命名为Blog。
生成带有mongoid的项目,并自动运行bundler:
$ padrino g project your_project -d mongoid -b
生成带有riot测试和rr模拟(mocking)的项目:
$ padrino g project your_project -t riot -m rr
生成带有swquel和mysql的项目:
$ padrino g project your_project -d sequel -a mysql
生成微型项目骨架:
$ padrino g project your_project --tiny
为项目选择根目录路径:
$ padrino g project your_project -r /usr/local/padrino
该指令将在/usr/local/padrino/your_project/下创建新的Padrino项目。
从克隆的git仓库使用Padrino:
$ padrino g project your_project [--dev] # Use padrino from a git checkout
如果你想了解更多关于搭建开发环境的细节,欢迎访问The Bleeding Edge!
插件生成器
插件生成器允许用户基于一个包含了所有必要动作的模板来生成Padrino项目。插件还能够在现有的Padrino项目中执行。插件生成器额外提供简单的DSL借助Thor使得生成项目易如反掌!
$ padrino g project my_project --template path/to/my_template.rb
该命令基于提供的模板文件来生成项目,也可以基于URL来生成,比如用一个gist:
$ padrino g project my_project --template http://gist.github.com/356156
你也可以从官方模板仓库直接执行模板文件:
$ padrino g project my_project --template sampleblog
也可以将模板当成插件应用到Padrino应用:
$ cd path/to/existing/padrino/app
$ padrino g plugin path/to/my_plugin.rb
还可以从官方插件仓库直接执行插件:
$ cd path/to/existing/padrino/app
$ padrino g plugin hoptoad
通过下面这条命令可以获得可用插件列表:
$ padrino g plugin --list
基本的模板(插件)文件看起来一般是这样的节奏:
# my_template.rb project :test => :shoulda, :orm => :activerecord generate :model, "post title:string body:text" generate :controller, "posts get:index get:new post:new" generate :migration, "AddEmailToUser email:string" require_dependencies 'nokogiri' git :init git :add, "." git :commit, "initial commit" inject_into_file "app/models/post.rb","#Hello", :after => "end " rake "ar:create ar:migrate" initializer :test, "# Example" app :testapp do generate :controller, "users get:index" end git :add, "." git :commit, "second commit"
记着哦,模板文件都是口味纯正的Ruby代码文件,并且可以访问所有可用的Thor动作。
控制器生成器
选项 |
默认值 |
参数 |
介绍 |
---|---|---|---|
app | nil | -n | 指定应用 |
root | . | -r | 指定根目录路径 |
destroy | false | -d | 删除所有生成的文件 |
Padrino为你的应用提供了用于快速生成控制器的生成器。需要注意的是,控制器测试是专门针对由生成应用时选择的测试框架来生成的。
特别需要注意的是,控制器生成器是根据Padrino约定来开展工作的。
还有比使用控制器生成器更简单的事吗:
$ padrino g controller Admin
如果你想为某个特定的子应用创建控制器:
$ padrino g controller Admin -a my_sub_app
也可以为你的控制器添加一个你想要的动作:
$ padrino g controller Admin get:index get:new post:create
控制器生成器将会在app/controllers/admin.rb构建控制器文件并根据生成应用时选择测试框架在test/controllers/admin_controller_test.rb构建控制器测试文件,还会创建一个默认的路由来映射控制器名和路由名。举个栗子:
$ padrino g controller User get:index
会生成一条URL路由来将:index映射到/user/index。
假如你把destroy选项的值设置为true,就可以销毁你创建的控制器。destroy选项的默认值是false——这不废话嘛~
$ padrino g controller User -d
该命令删除所有创建的控制器文件。
模块生成器
选项 |
默认值 |
参数 |
介绍 |
---|---|---|---|
root | . | -r | 定义根目录路径 |
skip_migration | false | -s | 不生成数据迁移 |
destroy | false | -d | 删除所有生成的文件 |
Padrino提供了用以在应用中快速生成模块的生成器。需要注意的是,模块和迁移是根据生成应用时所选的对象关系映射组件和测试框架来专门生成的。
特别需要注意的是,模块生成器也是根据Padrino约定来开展工作的。如果在现有Padrino应用中使用非Padrino生成的模块生成器,下场很难设想哦!
还有比使用模块生成器更简单的事情吗:
$ padrino g model User
你也可以在用户模块里这是特定的字段:
$ padrino g model User name:string age:integer email:string
模块生成器会根据你的对象关系映射组件在应用中生成一些文件。
一般会生成下面这些文件:
- 模块定义文件 [app/models/user.rb]
- 迁移声明 [db/migrate/xxx_create_users.rb]
- 模块单元测试文件 [test/models/user_test.rb]
只要学会了如何使用模块生成器,你想怎么生、想生多少,谁都拦不住!
也可以用destroy选项销毁你生成的模块,该参数默认值为false——再废话,拖出去斩了!
$ padrino g model User -d
该命令将删除所有模块文件。【楼主注:准确地说,应该是“删除所有指定的模块文件”】
迁移生成器
选项 |
默认值 |
参数 |
介绍 |
---|---|---|---|
root | . | -r | 指定根目录路径 |
destroy | false | -d | 删除所有生成的文件 |
Padrino提供了可快速修改和操作数据库模式(Schema)的生成器。
迁移根据创建应用时所选择的对象关系映射来生成。
需要特别注意的是(呃,又来了),迁移生成器业主要是根据Padrino约定来开展工作。如果你在Padrino应用中使用非Padrino迁移生成器,后果自负哦!
还有比使用迁移生成器更简单的事情吗:
$ padrino g migration AddFieldsToUsers
$ padrino g migration RemoveFieldsFromUsers
还可以往迁移文件中添加特定的列:
$ padrino g migration AddFieldsToUsers last_login:datetime crypted_password:string $ padrino g migration RemoveFieldsFromUsers password:string ip_address:string
迁移生成器根据对象关系映射组件在db/migrate/xxx_add_fields_to_users.rb创建迁移文件,并将命令中指定的列包含进去。
通过destroy选项可以删除迁移文件。该参数默认值为false——又废话,无语了!
$ padrino g migration AddFieldsToUsers -d
该命令将删除生成的迁移文件。
邮件发送器生成器
选项 |
默认值 |
参数 |
介绍 |
---|---|---|---|
app | nil | -n | 指定应用 |
root | . | -r | 指定根目录路径 |
destroy | false | -d | 删除所有生成的文件 |
Parino提供可快速创建新邮件发送器的生成器。
非常值得注意的是,邮件发送器也是根据Padrino约定来开展工作的。
还有比使用邮件发送器生成器更简单的事情吗:
$ padrino g mailer UserNotifier
如果你想在子应用中创建邮件发送器:
$ padrino g mailer UserNotifier -a my_sub_app
还可以为邮件发送器添加特定的动作:
$ padrino g mailer UserNotifier confirm_account welcome inactive_account
邮件发送器生成器会在app/mailers/user_notifier.rb中构建邮件发送器。
要删除所有邮件发送器文件,快用destroy选项,默认值不说了。
$ padrino g mailer UserNotifer -d
该命令将删除创建的邮件发送器文件。
子应用生成器
选项 |
默认值 |
参数 |
介绍 |
---|---|---|---|
tiny | false | -i | 生成微型应用骨架 |
root | . | -r | 定义根目录路径 |
destroy | false | -d | 删除所有生成的文件 |
楼主:前面多次提到“子应用”,借问子应用何处有,牧童遥指生成器。
不同于其它土鳖Ruby框架,Padrino主要被设计用来同时挂在多个应用。
首先,你得创建一个项目:
$ padrino g project demo_project
$ cd demo_project
进入demo_project目录并创建子应用:
$ padrino g app one
$ padrino g app two
默认情况下,这些子应用被挂载在:
- /one
- /two
但是你也可以通过编辑config/apps.rb来做一些改动。
然后创建控制器:
your_project$ padrino g controller base --app foo # 为Foo子应用创建控制器
your_project$ padrino g controller base # 为主应用创建控制器
your_project$ padrino g controller base --app bar # 为Bar子应用创建控制器
或者邮件发送器:
your_project$ padrino g mailer registration --app foo # 为Foo子应用创建邮件发送器
your_project$ padrino g mailer registration # 为主应用创建邮件发送器
your_project$ padrino g mailer registration --app bar # 为Bar子应用创建邮件发送器
微型骨架生成器
项目生成器和子应用生成器都用来生成更小的项目骨架。相比于默认骨架,“微型”选项可以移除掉控制器、帮助程序和邮件发送器需要的文件夹,并且在其位置生成controllers.rb、helpers.rb和mailers.rb文件。
使用微型骨架生成器来创建项目:
$ padrino g project tiny_app -d mongoid --tiny
或者在已有的项目中用微型骨架生成器创建子应用:
my_app$ padrino g app tiny_app --tiny
管理生成器
选项 |
默认值 |
参数 |
介绍 |
---|---|---|---|
name | nil | -a | 指定管理应用的名称 |
root | . | -r | 指定根目录路径 |
theme | default | none | 生成带主题的管理应用 |
skip_migration | false | -s | 不生成迁移 |
destroy | false | -d | 删除所有生成的文件 |
Padrino附带了一个内建的管理面板,还有比生成管理应用更简单的事情吗:
$ padrino g admin
可以在生成管理应用的时候就给它指定主题:
$ padrino g admin --theme blue
可用的主题有:amro, bec, bec-green, blue, default, djime-cerulean, kathleene, olive, orange, reidb-greenish, ruby, warehouse
这将生成管理应用并将其挂载在/admin,如果你想更加深入地了解管理应用,欢迎阅读《管理指南》。