HostMonster:在Ruby中运行'Generate'时抱错

出自美国主机知识库

跳转到: 导航, 搜索

在Ruby中运行'Generate'时抱错

当在我的第一个Rails工程里执行 'Generate' 命令时,我得到了无数的错误结果和被告知控制器没有创建。

这个问题通常只是在你创建了第一个application后才会出现,为你的新的子域名产生symlink ,建立数据库库然后尝试为工程创建控制器,请阅读知识库文章ID:000232,使用:

[~/rails/first]# ./script/产生控制器。首先是新的编辑命令字符。通常的结果是出现几行’创造的’字符,表明控制器已经成功创建。

否则,你会得到下面这样的错误消息:

/usr/lib/ruby/1.8/yaml.rb:133:in `load': syntax error on line 54, col 0: `production:' (ArgumentError) 
from /usr/lib/ruby/1.8/yaml.rb:133:in `load'
from /usr/lib/ruby/gems/1.8/gems/rails-1.2.3/lib/initializer.rb:523:in `database_configuration'
from /usr/lib/ruby/gems/1.8/gems/rails- 1.2.3/lib/initializer.rb:228:in `initialize_database'

换句话说,出错字符串可能以这样的形式开始: /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:204:in `establish_connection': development database is not configured(ActiveRecord::AdapterNotSpecified) from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:195:in `establish_connection'

这2个例子都表示database.yml文件存在一个错误,可能是结构性的错误。 该文件由'rails first' 命令产生,位于/rails/first/config/ 目录。

database.yml文件,严格说来是一个 'yaml' 文件。YAML 是 "一个国际协作创造的数据连续语言,具有可读性和强大的计算能力。" (按照引用的链接)问题之所以产生是由于yaml文件的一个不可违反的规则; 文件中绝对不可以使用<TAB>。只有空格是被允许的 。PYTHON 用户通常会在这里遇到问题,因为PYTHON文件可以使用<TAB>。最后,tabase.yml 文件具有精确的结构并且对 Ruby 操作至关重要。两者的结合意味着database.yml文件的一个小小错误将会在Ruby导致惨重的结果,通常意味着你所期待的结果将不可能出现。

举一个明显的例子。 yml file 文件中的评论是以'#' 开头的,'#' 和下一行之间的所有内容都会被编译器忽略。一些开发者习惯在他们的密码中使用一个'#' 以满足密码复杂性的要求。但是在.yml文件的密码,用户名或文件名中的'#' 将导致编译器无法正常工作。Yml与.xml文件类似,同样严格分等级,这就意味着下面的包含在数据库中的三种结构并不等价。第一个:

development:
adapter: mysql
database: username_firstdev
host: localhost
username: username_rails
password: password

可以正确地工作,因为 "development:"的"Nested Mapping"的参数是缩进排印的,表明层次。

这个结构:

development:
adapter: mysql
database: username_firstdev
host: localhost
username: username_rails
password: password

无法工作,因为编译器将会尝试将 "adapter:"放置在与 "development:"相同的等级上。 一句话,"白色间隔"没被考虑 ,就是等价的。在Ruby的世界里, 他们是完全不同的结构。

这个结构:


development:
adapter: mysql
database: username_firstdev
host: localhost
username: username_rails
password: password

尽管看起来与第一个类似,同样无法工作,因为参数行使用的是tabs而不是空格。

小心谨慎地对待你的Ruby工程里.yml文件的结构和语法,可以避免很多阻止你的程序成功运行的问题。作为编程者,我们经常只看文件的正文而忽略结构,因为在我们的世界里, '空格' 通常是没有意义的。 在YAML世界,没有什么比事实更重要。

你现在应该去阅读别的 YAML 文件,可以在下面的站点找到很多有帮助的信息:http://yaml4r.sourceforge.net/ ,和http://www.yaml.org/. YAML 的Cookbook 提供很多关于结构和语法的无价的小窍门。

感谢 Bluehost 小组的Jarod Reid 追踪这个问题的起源。

个人工具
名字空间
变换
动作
导航
工具/资源
工具箱