mac中安装了ruby on rails为什么还要装数据库

mac中安装了ruby on rails为什么还要装数据库,第1张

您好,在安装完Ruby 200后运行“gem install rails”命令开始安装Rails,系统死活没有响应,于是Ctr+C 中断安装程序。 刚开始以为是权限的问题,加上了sudo,发现问题依旧,再次Ctr+C中断安装程序。 折腾好几回都一样,后来去网上查一查,发现原

Ruby on Rails是一个用于编写网络应用程序的框架,它基于计算机软件语言Ruby,给程序开发人员提供强大的框架支持。Ruby on Rails包括两部分内容:Ruby语言和Rails框架。

什么是Ruby

Ruby 语言是一种动态语言,它与Python、Smalltalk和Perl这3种编程语言有些类似。Ruby语言起源于日本,它的研发者是日本人松本行弘(Matsumoto Yukihiro)。松本行弘在1993年开始着手Ruby语言的研发工作,他开发Ruby语言的初衷是为了提高编程的效率。 1995年12月Matz推出了Ruby的第一个版本Ruby 095。

Ruby语言的主要特点如下。

1.纯的面向对象语言

在Ruby中,一切皆是对象。下面举一个例子来更直观地说明Ruby语言的这一特点。

在Java中,求一个数的绝对值的代码如下。

int c = Mathabs(-20);

而在Ruby语言中,一切皆是对象,也就是说“-20”这个数也是一个对象,因此,求一个数绝对值的Ruby代码形式如下。

c = -20abs

这样的代码编写方式是不是更形象一些呢?

2.解释型脚本语言

Ruby 语言是解释型脚本语言,它既有脚本语言强大的字符串处理能力和正则表达式,又不失解释型语言的动态性。一方面,在最初设计Ruby语言时,Ruby的研发者松本行弘考虑到文字处理方面的需要,他借鉴了Perl语言在文字处理方面的成功经验。另一方面,松本行弘将Ruby语言设定为一种解释型语言,Ruby 的动态性使得由Ruby语言编写的程序不需要事先编译即可直接运行,这为程序的调试带来了方便。同时,这一特点可以实现开发过程中的快速反馈。

3.其他特点

(1)动态载入。可以在运行时候重定义自己,类也可以在运行时继承或取消继承。

(2)自动内存管理机制。

(3)多精度整数。

(4)迭代器和闭包。

(5)开源项目。有大量活跃的社区支持Ruby语言。

什么是Rails

虽然Ruby语言有很多优点,但是一直以来,其流行的范围也仅限于日本。直到2004年,Ruby才逐渐被世界上其他地区的人们所认识,那么是什么让Ruby语言走向世界的呢?是Rails。

Rails 框架首次提出是在2004年7月,它的研发者是26岁的丹麦人David Heinemeier Hansson。不同于已有复杂的Web 开发框架, Rails是一个更符合实际需要而且更高效的Web开发框架。Rails结合了PHP体系的优点(快速开发)和Java体系的优点(程序规整),因此, Rails在其提出后不长的时间里就受到了业内广泛的关注。

Rails框架主要有如下的6大特点。

1.全栈式的MVC框架

Rails是一个全栈式的MVC框架,换句话说,通过Rails可以实现MVC模式中的各个层次,并使它们无缝地协同运转起来。

在实际开发一个MVC模式的Web应用项目时,如果使用Java开发,需要用到Struts(Model层)、Hibernate (Controller 层)和Spring(View层)3个框架,而且需要额外整合3个框架开发出的内容。而使用Ruby语言开发相同的项目时,只需要用到Rails框架就可以完成。

2.约定优于配置

为了说明各个对象之间的关联关系,一般的Web应用开发框架往往采用写入XML配置文件的方法。这种方式虽然可以解决一些问题,但是却带来了管理上的混乱。

Rails 对此的态度是约定优于配置,这意味着在Rails中不会出现XML配置文件。Rails使用Web应用多年来积累的各种常见约定(更具体地说是命名规则)来代替XML配置文件,而在Rails内部的映射与发现机制根据这些约定可以实现对象之间的关联。在第1章中,通过Rails的映射与发现机制实现了数据表与Ruby对象之间的关联。

3.更少的代码

使用约定来代替XML配置文件说明Rails本身完成了大量的底层工作,这意味着使用更少的代码来实现应用程序是极有可能的。此外,代码量的缩减也减小了出现bug的可能性,降低了维护程序和升级程序的难度。

4.生成器

Rails 使用的实时映射技术和元编程技术,免去了开发人员在开发过程中编写大量样板文件代码的烦恼。在少数需要使用样板文件代码的时候,开发人员可以通过 Rails内建的生成器脚本实时创建,而不再是通过手工编写。Rails的这个特点可以使开发人员更专注于系统的逻辑结构,而不必为一些琐碎的细节所烦扰。

5.零周转时间

对已有的Web应用系统进行修改后,其一般需要经过配置、编译、发布、重新设置、测试等一系列步骤才能投入使用,这明显浪费了许多时间。而使用Rails开发Web应用系统,可以通过浏览器即时查看程序运行结果,从而节约了大量的时间。

6.支架系统

Rails的支架系统可以自动为任何相关的数据库表创建一套包含标准CRUD *** 作和前台视图的系统。通过支架系统,开发人员可以方便快捷地 *** 纵数据库中的数据表。此外,Rails也允许开发人员使用自己设计的代码或视图来替换自动生成的代码和视图。

目前,Rails的最新版本是2005年12月13日发布的v100。从RoR正式提出到v100的发布,RoR在一年多的时间里受到了业内人士的广泛关注。RoR受到广泛关注主要有如下两个原因:首先,RoR的开发效率高(部署容易)、功能丰富(支持Ajax等流行应用),有消息称对于相同的 Web开发项目,使用RoR开发比使用Java体系架构开发快5~10倍;此外,令人不可思议的高性能是其受到关注的另一个重要原因,根据CSDN上转载的新闻称使用RoR开发出来的项目性能,比基于Struts+Hibernate+Spring的Java应用还要高15%~20%。

RoR 当前遇到的主要问题是使用RoR搭建的大型商业应用还很少,究其原因可以概括为两点:第一,从开发能力的角度,RoR是一个基于Ruby语言的轻型Web 开发框架,很多开发者对其是否适合大型应用难以把握。第二,本身使用RoR开发的大型商业应用较少,使得后来者持观望态度。

综合分析来看,RoR的发展前景还是很光明的。RoR在短时间内取得了巨大的成就,它打破了Web开发领域的固有观念,方便快捷的开发方式使其被广泛接受。而事实上,现在已有几家跨国公司正在使用RoR开发自己的Web应用程序,并且有多家大型公司在考虑使用RoR进行Web应用开发。

Ruby 和rail 回归框架

Ruby和 rail是非常简洁的 很容易 很丰富 我无法避免的连续看到以及听到以上这样的说法 比如说 Bill Walton 写的Rail回顾上关于Ruby的文章提到 如果我告诉你当你使用Rail开发一个Web应用程序可以比你使用一种特定的Java框架开发要快至少十倍的时候 你会怎么想

在尝试了RnR之后 我发现这就是一个伴随旧技术的非常经典的框架

· Ruby是一种非常有力量的语言 就像Smalltalk 我选择静态语言

· 搭建的材料是被动代码生成 就像是IDE wizards或者AppFuse 我选择动态代码生成 或者是更好的——根本就不需要代码生成

· 关系数据库中心 编码发生器和ActiveRecord在表中会被首先想到 然后是在类别中被想到 我选择一种仅仅面向对象的 就像是Hibernate JPA 甚至是ODBMS

· MVC 我正在寻找比旧式MVC框架更新很好的工具

Java的问题 Java开发者

在Java的世界中 生产力是文化问题 而不是技术问题 这就是所谓的这不是Java的错 而是我们的错 我们作为Java开发者需要设计出非常漂亮的体系 以适用于任何地方的GoF模式 使得任何工具都是可再度使用的 把三层架构放到我们所有的系统中以及使用web服务器 我们不是在寻找最直接的方法 所以我们就没办法发现最直接的方法 但是Java 是一种非常简单的语言 使得我们很轻易就可以接近软件开发

Java生产力 其它的方法

解决生产力的一个方法是使用驱动模型 这就是模型环节的开发 仅仅是我们应用程序中的模型环节 就可以使用框架来生产所有的应用程序 MDA OpenXava Trails NakedObjects Roma框架和JMatter都是采用的这种方式

目标

这是所需要应用程序的主要界面

图一

基本上 应用程序推测需要做三件事情

· 列出所有准则的清单

· 创造新准则和编辑现有的准则

· 为某个类别指定合适的准则

Ruby on Rails第一次冲刺

使用RnR的第一步是创建一个新的项目 在命令行你需要输入

$ rails cookbook

现在你必须创建以及配置你的数据库

现在是时间输入你的第一行代码了 在这个例子中使用SQL代码

      drop table if exists recipes;

drop table if exists categories;

create table categories (

id int not null auto_increment

name varchar( ) not null default

primary  key(id)

) engine=InnoDB;

create table recipes (

id int not null auto_increment

category_id int not null

title varchar( ) not null default

description varchar( ) null

date date null

instructions text null

constraint fk_recipes_categories foreign key

(category_id) references categories(id)

primary key(id)

) engine=InnoDB;

显然你需要在数据库上面执行这些语句

最后的步骤是生成Ruby代码 你只需要执行O S框架的下一个命令

$ ruby script\generate scaffold recipe recipe

$ ruby script\generate scaffold category category

现在 你已经拥有RnR应用程序的第一个版本 并且准备运行

很少量的工作 一个简单的 创建表格 然后执行向导 让我们看看结果

Rails结果

这是应用程序的结果

图二

图三

图四

少量的工作 少量的结果

JPA on OX的第一次冲刺

继续使用OpenXava 使用OpenXava的第一步是创建新的项目

$ ant CreateNewProject xml Dproject=CookBook

现在你必须创建以及配置你的数据库

现在是时间输入你的第一步代码了 在这个例子中使用Java代码

      Recipe java:

package okbook model;

import java util ;

import javax persistence ;

import openxava annotations ;

@Entity

@View(members= title; description; date; instructions )

public class Recipe {

@Id @GeneratedValue @Hidden

private Integer id;

@Required @Column(length= )

private String title;

@Column(length= )

private String description;

private Date date;

@Stereotype( HTML_TEXT )

private String instructions;

public Integer getId() {

return id;

}

public void setId(Integer id) {

this id = id;

}

public String getTitle() {

return title;

}

public void setTitle(String title) {

this title = title;

}

public String getDescription() {

return description;

}

public void setDescription(String description) {

this description = description;

}

public Date getDate() {

return date;

}

public void setDate(Date date) {

this date = date;

}

public String getInstructions() {

return instructions;

}

public void setInstructions(String instructions) {

this instructions = instructions;

}

}

Category java:

package okbook model;

import java util ;

import javax persistence ;

import openxava annotations ;

@Entity

public class Category {

@Id @GeneratedValue @Hidden

private Integer id;

@Required @Column(length= )

private String name;

public Integer getId() {

return id;

}

public void setId(Integer id) {

this id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this name = name;

}

}

最后一个步骤是生成数据库图表 你只需要执行项目中的一个小目标

$ ant updateSchema

现在 你已经拥有OpenXava应用程序的第一个版本 并且准备运行

少量的工作 简单的POJO 以及执行 更新图表 让我们看看结果

OpenXava结果

这是应用程序的结果

图五

图六

注意 用户可以创建更新 删除 从列表生成PDF 将列表输入到excel 每一列的命令 大型结果和过滤数据的支持分页 而且你可以直接部署 不需要代码 仅仅是执行一个小目标 JSR 入口上的应用程序 以及OpenXava的look & feel能够适用于入口的look & feel 这就是一个应用程序准备产出的第一步

少量的工作 完美的结果

观察这里RnR 与 OX之间的差别 一个冷静的观点是在RnR中 你先输入表 而在OpenXava中先输入类别

控制器

Rails引起basic CRUD的控制逻辑 你在下面可以看到

图七

另一方面 OX不会为CRUD生成任何代码 OpenXava仅有一个属性代码 可以执行CRUD和打印 将自动化配置给所有的实体 你可以书写你自己的属性CRUD逻辑 或者你可以为一个特有的实体书写详细逻辑 但是你不会为每一个实体设置控制代码 使用这种方法 你需要维护少量的代码 并且你可以改变CRUD独立单元的逻辑

Rails使用合成码 OX使用属性代码

你可以在OpenXava wiki上面学到更多的OX控制器知识

增加关联

为了规范在Ruby中从类别增加关联 你需要在category rb中书写如下代码

图八

以及在recipe rb中

图九

相当简单 但是 你要做更多的工作 你必须编译

cookbook \app\views\recipe\_form r

增加如下代码

      <p><labelfor= recipe_category_id >Category</label><br/>

<%= select( recipe category_id Category find(:llect{|c| [c name c id] }) %></p>:

结果是

图十

在这个环节 OpenXava中 你不得不在Category java中使用JPA规定关联

     @ManyToOne(optional=false) @DescriptionsList

private Category category;

and in Recipe java:

@OneToMany(mappedBy= category )

private Collection recipes;

而且你不需要接触任何类似HTML代码 应用程序将会显示如下

图十一

你有一个为修改产生的链接或者从这里创建新类别

不增加任何辅助编码 如果使用者使用类别单元 他将获得每一个类别中准则的收集 如下所示

图十二

在这里 RnR应用程序还是不具备这种特性 你需要书写一些Ruby 和HTML代码来实现一样的结果

在这一块 RnR 和 OX的主要差别是 在OX中你不需要书写任何HTML类似的代码 事实上你连用户界面代码都根本不需要书写

精确的基础资料

Ruby on Rails指导的下一个步骤是为一种特性生成基础资料 在RnR中你不得不编译控制编码从而达到这个目的 让我们开看看

修改以及更新的方法是增加如下代码行

      @recipe date = Time now

The equivalent in OX is adding the @DefaultValueCalculator annotation in model:

@DefaultValueCalculator(CurrentDateCalculator class)

private Date date;

用一种更为公开的方法获得一样的结果

在这里 尽管RnR中在控制器上放置的代码 OX中统计基础资料的代码 为了确认以及业务逻辑 一般来说是放在模型上 OX促进从控制器转移业务逻辑到模型上

RnR的相关文章中提到 我改良模型文件 所以我需要重新启动我们的web服务器 尽管使用Eclipse WTP 我只需要按一下Ctrl 加上B 在浏览器上点击刷新以便于看见OpenXava应用程序上面模型的变化

结论

Ruby on Rails 和 OpenXava之间最主要的差别是RnR是 MVC框架 你不得不书写模型和控制器 OX是模型驱动框架 你只需要书写模型 结果就是更少的代码 更好的程序

lishixinzhi/Article/program/Java/JSP/201311/19267

rails 有 migrate 工具,所有数据库更改都会记录在 migration中, 可以很方便的进行数据库结构的改变。 不知道你是做什么开发的。

但应该也有相类似的工具。

当然,你可以用rails的migrate工具进行数据库的更改。

首先检查一下你的mysql服务打开没有

你再检查一下/config/databaseyml

项目默认的好像是链接sqlite3

默认值

# SQLite version 3x

# gem install sqlite3-ruby (not necessary on OS X Leopard)

development:

adapter: sqlite3

database: db/developmentsqlite3

timeout: 5000

# Warning: The database defined as 'test' will be erased and

# re-generated from your development database when you run 'rake'

# Do not set this db to the same as development or production

test:

adapter: sqlite3

database: db/testsqlite3

timeout: 5000

production:

adapter: sqlite3

database: db/productionsqlite3

timeout: 5000

-----------------------

mysql应该的是

# SQLite version 3x

# gem install sqlite3-ruby (not necessary on OS X Leopard)

development:

adapter: mysql

database: 项目的数据库名

username: root

password: 你的密码

socket: /path/to/your/mysqlsock

# Warning: The database defined as 'test' will be erased and

# re-generated from your development database when you run 'rake'

# Do not set this db to the same as development or production

test:

adapter: mysql

database: 项目的数据库名

username: root

password: 你的密码

socket: /path/to/your/mysqlsock

production:

adapter: mysql

database: 项目的数据库名

username: root

password: 你的密码

socket: /path/to/your/mysqlsock

rails的确是来的方便,一个rails generate scaffold命令下来就可以生成view、controller和model的所有文件,然后再执行rake db:migrate就可以生成相应的数据库表结构。而就是这个简单的rake db:migrate却产生了预想不到的问题:

首先交代一下背景:rails创建项目时,默认使用了SQLite数据库。为了快速上手,我换成了MySQL,也修改了相应的配置文件config/databaseyml。

第一个问题:

rake aborted!

uninitialized constant >

第种式 直接运行 Rails server指令 启Rails服务器 服务器自加载conifg/databaseyml 文件并按照参数创建数据库种式 启服务通rake db:create RAILS_ENV='development' 指令创建数据

以上就是关于mac中安装了ruby on rails为什么还要装数据库全部的内容,包括:mac中安装了ruby on rails为什么还要装数据库、关于Ruby、Java 与Ruby on Rails对接等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10147222.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存