- 浏览: 260660 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
aliang032:
php socket 编程建使用http://www.work ...
PHP Socket 编程 -
大秦布衣:
不错的教程 简明额要 不过要是完善百度的照片就更好了
Git入门教程 -
bravelinw:
这个问题网上有很多个版本,有的还弄得很深邃,还是lz的看到了问 ...
(leopard)MySQL #2002 - 服务器没有响应 -
sunnylocus:
很有感触,我也是刚刚做项目经理,沟通能力是做PM的基本要求,希 ...
面试了一位项目经理后我的感想 -
artoy:
看来,对技术人员也有与对销售人员相同的要求,
面试了一位项目经理后我的感想
http://github.com/ruboss/ruboss4ruby/wikis/getting-started-with-ruboss-and-ruby-on-rails
Introduction
In this tutorial we will build a new Rails application from scratch using the Ruboss Framework. Our application should look like this:
Assumptions
The following steps have been tried with Flex Builder 3 (and command line tools) on Mac OS X.
You should have Ruby on Rails 2.1 (or higher) and MySQL 5.0 or higer installed for the Ruby on Rails portion of this tutorial and Flex Builder 3 if you intend to edit your Flex code using it.
1. Make sure you have added Flex SDK bin directory to your $PATH variable so that you can invoke mxmlc from the command line) if necessary.
Developing a Flex application that talks to Ruby on Rails with Ruboss Framework
This application will be called pomodo. First, we’ll create the standard RubyOnRails application.
$>rails -d mysql pomodo
$>cd pomodo
Next, we will install the ruboss4ruby gem:
$>sudo gem install ruboss4ruby
Now, we need to go and set-up our application to use the ruboss4ruby gem we just installed.
Edit config/environment.rb and add:
config.gem "ruboss4ruby"
Next, we run the ruboss_config generator to create the appropriate Flex directories and create default ruboss configuration:
$>./script/generate ruboss_config
Next, we proceed to scaffold our application.
Using YAML to scaffold your Flex + Rails application
Scaffolding is a cool way to get started with a Rails (and now Flex) applications quickly. Unfortunately, things tend to become quite cumbersome once you get beyond 5 or so models. You have to individually run scaffolding for each model and then go and edit relationships in both rails and flex code. This approach just doesn’t scale. You might tolerate doing all this manual work for a few models, but what are you going to do when you have to run pretty much the same command 30 or 40 times and then remember how all these things relate to each other? Wouldn’t it be better if you could specify the bulk of your data model in some easy to read file and just run that once?
This is basically the intuition behind a generator that comes with ruboss4ruby gem. It’s called ruboss_yaml_scaffold.
Now comes the cool stuff. Let’s create a file called db/model.yml that contains the following:
project:
- name: string
- notes: text
- start_date: date
- end_date: date
- completed: boolean
- belongs_to: [user]
- has_many: [tasks]
location:
- name: string
- notes: text
- belongs_to: [user]
- has_many: [tasks]
task:
- name: string
- notes: text
- start_time: datetime
- end_time: datetime
- completed: boolean
- next_action: boolean
- belongs_to: [project, location, user]
note:
- content: text
- belongs_to: [user]
user:
- login: string
- first_name: string
- last_name: string
- email: string
- has_many: [tasks, projects, locations]
- has_one: [note]
This should be fairly self explanatory except for a few details you might not have seen in YAML documents before.
1. You can specify most of the aspects of the models (including relationships) directly in the YAML file:
1. Use belongs_to: [<references here>] notation (e.g. belongs_to: [user]) to refer to the belongs_to end of the relationship.
2. has_one: following by an array of model names to denote has_one end of relationship (e.g. has_one: [note])
3. has_many: works the same way has_one and belongs_to do.
2. - in front of every attribute line preserves the exact order of elements in generated code. Make sure you add it!
That’s pretty much all there is to it. If your db/model.yml file contains the text above, you can run:
$>./script/generate ruboss_yaml_scaffold
And watch scaffolding fly by on the console.
Check out the Flex and Rails code after you run the command. It should have all the fields and relationships set up. This means no more extra manual labour to get your application into a runnable state. Just load some data by running:
$>rake db:refresh
If you have added Flex SDK bin directory to your $PATH variable run:
$>rake ruboss:flex:build
This will compile your new Flex application and move generated .swf file into the public/bin directory.
If you DON’T have mxmlc executable accessible from the command line you’ll have to open this project in Flex Builder and compile it.
Next, start the server by running:
$>./script/server
And point your browser at http://localhost:3000. It’s not going to be the greatest Flex application ever written but for a 5 minute scaffolding job it’s definitely not bad.
Porting Pomodo to AIR
ruboss_config generator you’ve just seen above actually takes an optional argument, which is quite handy for converting our Flex project into an AIR project. Make sure you say Y when prompted to overwrite .actionScriptProperties, .project and Pomodo.mxml files:
$>./script/generate ruboss_config -a
If you don’t want to bother with opening Flex Builder you can compile and run your new AIR application by doing this:
$>rake ruboss:air:build
$>rake ruboss:air:run
If you are running Flex Builder make sure you do the following:
1. It is recommended that you shutdown your Flex Builder before running the generator above. This generator will change a few Flex Builder specific files (such as .actionScriptProperties and .project) to include AIR specific information. This is how Flex Builder itself knows that it’s dealing with an AIR project as opposed to a Flex one. It’s not a very good idea to be changing Flex Builder specific files while it’s running.
2. It’s also a good idea to remove the Pomodo Run definition from Flex Builder (if you have it). To do that open Run Dialog... and delete Pomodo definition. Why is this a good idea? Well, we’ve previously run our application in Flex Builder as a Flex application. Flex Builder has saved that definition in its cache and is now convinced Pomodo is a Flex application. Converting this project to an AIR project makes the stuff Flex Builder has in its cache out of date. Our application is now going to be an AIR app. As far as Flex Builder is concerned these are not the same thing and they are run differently.
OK, let’s open Flex Builder again. With Flex Builder pacified we can now get back to somewhat more intersting stuff. The generator command above will also convert your main application file to something like this:
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:components="pomodo.components.generated.*"
layout="vertical"
styleName="plain"
initialize="init()">
<mx:Script>
<![CDATA[
import org.ruboss.services.AIRServiceProvider;
import pomodo.controllers.ApplicationController;
private function init():void {
ApplicationController.initialize([AIRServiceProvider], AIRServiceProvider.ID, "pomodo");
}
]]>
</mx:Script>
<mx:TabNavigator width="100%" height="100%">
<!-- For a simple demo, put all the components here. -->
<generated:ProjectBox/>
<generated:TaskBox/>
</mx:TabNavigator>
</mx:WindowedApplication>
Basically the only thing the generator changed in the code is the way our main application controller is initialized during application start-up.
OK, you are all done, hit the run button and you should see the same application now running in AIR. It will have no data of course because there is no fixtures for AIR. So go ahead and create a few tasks and projects. They are now being saved to your local AIR database called “pomodo”.
To recap: converting between a Flex application that talks to Rails server using XML-over-HTTP into an AIR application that’s using local SQL database is just a matter of running one command. A command that only changes the way our application is initialized, NOT any of the code used to actually manipulate projects and tasks.
Getting Pomodo AIR application to talk to Ruby on Rails again!
One nice thing about having much of the plumbing abstracted away is that you can now have your brand new AIR application talking to the Rails server again.
If you simply call ApplicationController.initialize() with no arguments then XML-over-HTTP is going to be the default service provider. So let’s change our Pomodo.mxml code to this:
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:components="pomodo.components.generated*"
layout="vertical"
styleName="plain"
initialize="init()">
<mx:Script>
<![CDATA[
import org.ruboss.Ruboss;
import pomodo.controllers.ApplicationController;
private function init():void {
Ruboss.httpRootUrl = "http://localhost:3000/";
ApplicationController.initialize();
}
]]>
</mx:Script>
<mx:TabNavigator width="100%" height="100%">
<!-- For a simple demo, put all the components here. -->
<generated:ProjectBox/>
<generated:TaskBox/>
</mx:TabNavigator>
</mx:WindowedApplication>
As you might have guessed this will tell the app to stop using local AIR database and start talking to the remote Rails server again. Remember to start your Rails server using “script/server” before running this app.
Finally, to convert our AIR application back into the Flex application it used to be run rconfig generator with no arguments again:
$>./script/generate ruboss_config
Again, remember to delete the Pomodo Run target and shutdown Flex Builder before you do that.
Check your console or development.log if you have any problems
Here’s what you should have been seeing if all went well:
[ttys000][Stingray]$ rails -d mysql pomodo
create
create app/controllers
create app/helpers
create app/models
create app/views/layouts
create config/environments
create config/initializers
create db
create doc
create lib
create lib/tasks
create log
create public/images
create public/javascripts
create public/stylesheets
create script/performance
create script/process
create test/fixtures
create test/functional
create test/integration
create test/unit
create vendor
create vendor/plugins
create tmp/sessions
create tmp/sockets
create tmp/cache
create tmp/pids
create Rakefile
create README
create app/controllers/application.rb
create app/helpers/application_helper.rb
create test/test_helper.rb
create config/database.yml
create config/routes.rb
create config/initializers/inflections.rb
create config/initializers/mime_types.rb
create config/initializers/new_rails_defaults.rb
create config/boot.rb
create config/environment.rb
create config/environments/production.rb
create config/environments/development.rb
create config/environments/test.rb
create script/about
create script/console
create script/dbconsole
create script/destroy
create script/generate
create script/performance/benchmarker
create script/performance/profiler
create script/performance/request
create script/process/reaper
create script/process/spawner
create script/process/inspector
create script/runner
create script/server
create script/plugin
create public/dispatch.rb
create public/dispatch.cgi
create public/dispatch.fcgi
create public/404.html
create public/422.html
create public/500.html
create public/index.html
create public/favicon.ico
create public/robots.txt
create public/images/rails.png
create public/javascripts/prototype.js
create public/javascripts/effects.js
create public/javascripts/dragdrop.js
create public/javascripts/controls.js
create public/javascripts/application.js
create doc/README_FOR_APP
create log/server.log
create log/production.log
create log/development.log
create log/test.log
[ttys000][Stingray]$ cd pomodo/
[ttys000][Stingray]$ ls
README app db lib public test vendor
Rakefile config doc log script tmp
[ttys000][Stingray]$ vi config/environment.rb
[ttys000][Stingray]$ ./script/generate ruboss_config
fetching 1.0.5 framework binary from: http://ruboss.com/releases/ruboss-1.0.5.swc ...
done. saved to lib/ruboss-1.0.5.swc
create lib/tasks/ruboss_tasks.rake
create .flexProperties
create config/ruboss.yml
create .actionScriptProperties
create .project
create html-template/history
create html-template/index.template.html
create html-template/AC_OETags.js
create html-template/playerProductInstall.swf
create html-template/history/history.css
create html-template/history/history.js
create html-template/history/historyFrame.html
create app/flex/pomodo/components
create app/flex/pomodo/controllers
create app/flex/pomodo/commands
create app/flex/pomodo/models
create app/flex/pomodo/events
create app/flex/pomodo/components/generated
create public/javascripts/swfobject.js
create public/expressInstall.swf
overwrite public/index.html? (enter "h" for help) [Ynaqdh] Y
force public/index.html
dependency ruboss_controller
create app/flex/pomodo/controllers/ApplicationController.as
create pomodo.tmproj
create app/flex/Pomodo.mxml
create app/flex/Pomodo-config.xml
[ttys000][Stingray]$ mate .
[ttys000][Stingray]$ ./script/generate ruboss_yaml_scaffold
running: ruboss_scaffold User
dependency scaffold
exists app/models/
exists app/controllers/
exists app/helpers/
create app/views/users
exists app/views/layouts/
exists test/functional/
exists test/unit/
exists public/stylesheets/
create app/views/users/index.html.erb
create app/views/users/show.html.erb
create app/views/users/new.html.erb
create app/views/users/edit.html.erb
create app/views/layouts/users.html.erb
create public/stylesheets/scaffold.css
create app/controllers/users_controller.rb
create test/functional/users_controller_test.rb
create app/helpers/users_helper.rb
route map.resources :users
dependency model
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/user.rb
create test/unit/user_test.rb
create test/fixtures/users.yml
create app/flex/pomodo/models/User.as
create app/flex/pomodo/components/generated/UserBox.mxml
force app/controllers/users_controller.rb
force app/models/user.rb
force test/fixtures/users.yml
create schema/migration
create db/migrate
create db/migrate/20081119102430_create_users.rb
dependency ruboss_controller
force app/flex/pomodo/controllers/ApplicationController.as
done ...
running: ruboss_scaffold Project
dependency scaffold
exists app/models/
exists app/controllers/
exists app/helpers/
create app/views/projects
exists app/views/layouts/
exists test/functional/
exists test/unit/
exists public/stylesheets/
create app/views/projects/index.html.erb
create app/views/projects/show.html.erb
create app/views/projects/new.html.erb
create app/views/projects/edit.html.erb
create app/views/layouts/projects.html.erb
identical public/stylesheets/scaffold.css
create app/controllers/projects_controller.rb
create test/functional/projects_controller_test.rb
create app/helpers/projects_helper.rb
route map.resources :projects
dependency model
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/project.rb
create test/unit/project_test.rb
create test/fixtures/projects.yml
create app/flex/pomodo/models/Project.as
create app/flex/pomodo/components/generated/ProjectBox.mxml
force app/controllers/projects_controller.rb
force app/models/project.rb
force test/fixtures/projects.yml
exists schema/migration
exists db/migrate
create db/migrate/20081119102431_create_projects.rb
dependency ruboss_controller
force app/flex/pomodo/controllers/ApplicationController.as
done ...
running: ruboss_scaffold Task
dependency scaffold
exists app/models/
exists app/controllers/
exists app/helpers/
create app/views/tasks
exists app/views/layouts/
exists test/functional/
exists test/unit/
exists public/stylesheets/
create app/views/tasks/index.html.erb
create app/views/tasks/show.html.erb
create app/views/tasks/new.html.erb
create app/views/tasks/edit.html.erb
create app/views/layouts/tasks.html.erb
identical public/stylesheets/scaffold.css
create app/controllers/tasks_controller.rb
create test/functional/tasks_controller_test.rb
create app/helpers/tasks_helper.rb
route map.resources :tasks
dependency model
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/task.rb
create test/unit/task_test.rb
create test/fixtures/tasks.yml
create app/flex/pomodo/models/Task.as
create app/flex/pomodo/components/generated/TaskBox.mxml
force app/controllers/tasks_controller.rb
force app/models/task.rb
force test/fixtures/tasks.yml
exists schema/migration
exists db/migrate
create db/migrate/20081119102432_create_tasks.rb
dependency ruboss_controller
force app/flex/pomodo/controllers/ApplicationController.as
done ...
running: ruboss_scaffold Note
dependency scaffold
exists app/models/
exists app/controllers/
exists app/helpers/
create app/views/notes
exists app/views/layouts/
exists test/functional/
exists test/unit/
exists public/stylesheets/
create app/views/notes/index.html.erb
create app/views/notes/show.html.erb
create app/views/notes/new.html.erb
create app/views/notes/edit.html.erb
create app/views/layouts/notes.html.erb
identical public/stylesheets/scaffold.css
create app/controllers/notes_controller.rb
create test/functional/notes_controller_test.rb
create app/helpers/notes_helper.rb
route map.resources :notes
dependency model
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/note.rb
create test/unit/note_test.rb
create test/fixtures/notes.yml
create app/flex/pomodo/models/Note.as
create app/flex/pomodo/components/generated/NoteBox.mxml
force app/controllers/notes_controller.rb
force app/models/note.rb
force test/fixtures/notes.yml
exists schema/migration
exists db/migrate
create db/migrate/20081119102433_create_notes.rb
dependency ruboss_controller
force app/flex/pomodo/controllers/ApplicationController.as
done ...
running: ruboss_scaffold Location
dependency scaffold
exists app/models/
exists app/controllers/
exists app/helpers/
create app/views/locations
exists app/views/layouts/
exists test/functional/
exists test/unit/
exists public/stylesheets/
create app/views/locations/index.html.erb
create app/views/locations/show.html.erb
create app/views/locations/new.html.erb
create app/views/locations/edit.html.erb
create app/views/layouts/locations.html.erb
identical public/stylesheets/scaffold.css
create app/controllers/locations_controller.rb
create test/functional/locations_controller_test.rb
create app/helpers/locations_helper.rb
route map.resources :locations
dependency model
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/location.rb
create test/unit/location_test.rb
create test/fixtures/locations.yml
create app/flex/pomodo/models/Location.as
create app/flex/pomodo/components/generated/LocationBox.mxml
force app/controllers/locations_controller.rb
force app/models/location.rb
force test/fixtures/locations.yml
exists schema/migration
exists db/migrate
create db/migrate/20081119102434_create_locations.rb
dependency ruboss_controller
force app/flex/pomodo/controllers/ApplicationController.as
done ...
identical pomodo.tmproj
overwrite app/flex/Pomodo.mxml? (enter "h" for help) [Ynaqdh] Y
force app/flex/Pomodo.mxml
identical app/flex/Pomodo-config.xml
[ttys000][Stingray]$ rake db:refresh
(in /Users/Dima/Projects/experiments/pomodo)
== 20081119102430 CreateUsers: migrating ======================================
-- create_table(:users)
-> 0.0034s
== 20081119102430 CreateUsers: migrated (0.0037s) =============================
== 20081119102431 CreateProjects: migrating ===================================
-- create_table(:projects)
-> 0.0045s
== 20081119102431 CreateProjects: migrated (0.0050s) ==========================
== 20081119102432 CreateTasks: migrating ======================================
-- create_table(:tasks)
-> 0.0044s
== 20081119102432 CreateTasks: migrated (0.0046s) =============================
== 20081119102433 CreateNotes: migrating ======================================
-- create_table(:notes)
-> 0.0037s
== 20081119102433 CreateNotes: migrated (0.0041s) =============================
== 20081119102434 CreateLocations: migrating ==================================
-- create_table(:locations)
-> 0.0038s
== 20081119102434 CreateLocations: migrated (0.0041s) =========================
[ttys000][Stingray]$ rake ruboss:flex:build
(in /Users/Dima/Projects/experiments/pomodo)
Compiling /Users/Dima/Projects/experiments/pomodo/app/flex/Pomodo.mxml
Loading configuration file /Applications/Adobe Flex Builder 3/sdks/3.0.0/frameworks/flex-config.xml
Loading configuration file /Users/Dima/Projects/experiments/pomodo/app/flex/Pomodo-config.xml
/Users/Dima/Projects/experiments/pomodo/app/flex/Pomodo.swf (378010 bytes)
Moving /Users/Dima/Projects/experiments/pomodo/app/flex/Pomodo.swf to
/Users/Dima/Projects/experiments/pomodo/public/bin
Done!
[ttys000][Stingray]$ ./script/server
=> Booting Mongrel (use 'script/server webrick' to force WEBrick)
=> Rails 2.1.2 application starting on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
** Starting Mongrel listening at 0.0.0.0:3000
** Starting Rails with development environment...
** Rails loaded.
** Loading any Rails specific GemPlugins
** Signals ready. TERM => stop. USR2 => restart. INT => stop (no restart).
** Rails signals registered. HUP => reload (without restart). It might not work well.
** Mongrel 1.1.5 available at 0.0.0.0:3000
** Use CTRL-C to stop.
Processing LocationsController#index (for 127.0.0.1 at 2008-11-19 12:25:45) [GET]
Session ID: 190716e0211d29be9dcd36c51d322a0e
Parameters: {"format"=>"fxml", "action"=>"index", "controller"=>"locations"}
SQL (0.000226) SET NAMES 'utf8'
SQL (0.000078) SET SQL_AUTO_IS_NULL=0
Location Load (0.000365) SELECT * FROM `locations`
Location Columns (0.001900) SHOW FIELDS FROM `locations`
Completed in 0.12109 (8 reqs/sec) | DB: 0.00257 (2%) | 200 OK [http://localhost/locations.fxml]
Processing NotesController#index (for 127.0.0.1 at 2008-11-19 12:25:45) [GET]
Session ID: 5a883bd95d84ab8890a05029203f5294
Parameters: {"format"=>"fxml", "action"=>"index", "controller"=>"notes"}
Note Load (0.000300) SELECT * FROM `notes`
Note Columns (0.001426) SHOW FIELDS FROM `notes`
Completed in 0.01247 (80 reqs/sec) | DB: 0.00173 (13%) | 200 OK [http://localhost/notes.fxml]
Processing TasksController#index (for 127.0.0.1 at 2008-11-19 12:25:45) [GET]
Session ID: 87dd200501748fddcaf98cfffbb0e654
Parameters: {"format"=>"fxml", "action"=>"index", "controller"=>"tasks"}
Task Load (0.000325) SELECT * FROM `tasks`
Task Columns (0.001808) SHOW FIELDS FROM `tasks`
Completed in 0.01924 (51 reqs/sec) | DB: 0.00213 (11%) | 200 OK [http://localhost/tasks.fxml]
Processing UsersController#index (for 127.0.0.1 at 2008-11-19 12:25:45) [GET]
Session ID: 6ea5349eab5dea59b8fcdff5cf34e3dc
Parameters: {"format"=>"fxml", "action"=>"index", "controller"=>"users"}
User Load (0.000304) SELECT * FROM `users`
User Columns (0.002440) SHOW FIELDS FROM `users`
Completed in 0.01688 (59 reqs/sec) | DB: 0.00274 (16%) | 200 OK [http://localhost/users.fxml]
Processing ProjectsController#index (for 127.0.0.1 at 2008-11-19 12:25:45) [GET]
Session ID: BAh7BiIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNo
SGFzaHsABjoKQHVzZWR7AA==--33a1d0f56f69993bc1d69552fd372a4f9a83fa44
Parameters: {"format"=>"fxml", "action"=>"index", "controller"=>"projects"}
Project Load (0.000349) SELECT * FROM `projects`
Project Columns (0.001927) SHOW FIELDS FROM `projects`
Completed in 0.01663 (60 reqs/sec) | DB: 0.00228 (13%) | 200 OK [http://localhost/projects.fxml]
发表评论
-
Web开发人员的利器:Ruby on Rails
2009-01-06 13:34 2265Java、PHP和ASP久经考验、 ... -
rails plugin list
2008-11-28 18:31 2060转自 http://idiotis.ms/4/rails+pl ... -
can't find header files for ruby
2008-11-25 18:04 2669还没有弄清楚确切原因 from http://www.m ... -
RSpec简明指南
2008-11-25 13:15 1463这是David Chelimsky写的 ... -
在mac上安装RMagick
2008-11-19 00:10 1974转载http://yuweijun.blogspot.com/ ...
相关推荐
Ruby on Rails 的官方网站提供了许多有用的阅读资源,例如 Getting Started with Rails 等。这些资源可以帮助开发者快速熟悉 Ruby on Rails 并开始开发。 六、结论 Ruby on Rails 是一个功能强大的开发框架,...
For those new to Rails, this book provides a quick introduction, the big picture, a walk through the installation process, and some tips on getting started. If you've already started working with ...
He is the co-creator of the Ruboss Framework, the RESTful way to develop Flex and AIR applications that easily integrate with Ruby on Rails. Peter is also the author of the Manning book Flexible ...
从给定的文件信息来看,我们正在探讨的是一本关于Ruby on Rails的书籍,书名为《Simply Rails2》,作者是Patrick Lenz。本书旨在为初学者提供深入理解Ruby on Rails框架的指南,从基础概念到高级主题均有涵盖,是...
ruby-getting-started, 在Heroku上,使用 ruby 入门 ruby-getting-started一个易于部署的Rails 应用程序,可以轻松部署到 Heroku 。这个应用程序支持在Heroku上开始使用 ruby 文章- check查看。在本地运行确保已经...
在第二章“Getting Started”中,作者介绍了如何搭建Ruby on Rails的开发环境。这部分内容对于新手来说至关重要,它涵盖了Ruby语言的基本安装、Rails框架的安装以及必要的数据库配置。此外,还会介绍如何设置Rails...
Grails 采用了 Model-View-Controller (MVC) 架构模式,与 Spring Framework 深度集成,同时借鉴了 Ruby on Rails 的许多最佳实践和设计原则。通过使用 Grails,开发者可以快速构建高质量、可扩展的 web 应用程序。 ...
Radcircle 开发入门学习在线资源 - Ruby 和 Ruby on Rails - Ruby 和一些 Ruby on Rails - Ruby on Rails(必须有账号,但有 14 天免费试用) - 不错的 Rails 和 Ruby 备忘单 - 免费的 rails 截屏视频,非常有帮助,...
自述文件 该自述文件通常会记录启动和运行应用程序所需的所有步骤。... Ruby版本 系统依赖 配置 数据库创建 数据库初始化 如何运行测试套件 服务(作业队列,缓存服务器,搜索引擎等) 部署说明 ...
Apress Pro ActiveRecord Databases with Ruby and Rails <br>Active Record has primarily been covered as a subsection, or maybe as a chapter or two, within a larger scoped book generally about the ...
This book is for web developers who are getting started with Rails and are looking for authentication solutions, as well as for Rails developers who are looking to extend their implementation of ...
- **Ruby on Rails**:Ruby on Rails是一种流行的Web开发框架,可以通过ActiveRecord ORM与DB2进行高效的数据交互。 - **PHP**:PHP是一种广泛使用的服务器端脚本语言,通过PDO或mysqli扩展可以直接与DB2进行通信。 ...
它借鉴了Ruby on Rails的许多设计理念,如Convention over Configuration(约定优于配置)和DSL(领域特定语言)。 2. **Groovy语言基础**:Groovy是Grails的基础,它是一种面向对象的、动态类型的JVM语言,语法...
Ruby入门 一个准系统的Rails应用程序,可以...$ cd ruby-getting-started $ bundle install $ bundle exec rake db:create db:migrate $ heroku local 您的应用现在应该在上运行。 部署到Heroku $ heroku create $