使用init.rb创建一个gem Rails 3

时间:2012-05-16 12:07:39

标签: ruby-on-rails ruby gem init

我创建了一个新的宝石:https://github.com/tntwebsolutions/ts3query

在我的init.rb文件中require主lib文件,这应该在加载rails应用程序时自动加载gem。但是,当我启动服务器时,它会发现init.rb文件未加载。

在我的应用程序中,我在Gemfile

中有这个
gem "ts3query", "~> 0.2.1"

在我的application_controller.rb

中执行此操作
@query = TS3Query.connect :password => password

但后来我收到了这个错误:

uninitialized constant ApplicationController::TS3Query

如果我这样做:

require 'TS3Query'
@query = TS3Query.connect :password => password

确实有效。但我无法弄清楚,当我的gem需要更改以加载rails应用程序时加载require 'TS3Query'

2 个答案:

答案 0 :(得分:5)

任何人都无法在任何地方调用

init.rb ,将您的文件从 TS3Query.rb 重命名为 ts3query.rb ,捆绑商将加载它自动为你服务。

避免使用带有大写和小写字符的名称,Linux和某些Mac具有区分大小写的文件系统,虽然它适用于某人可能不适用于其他所有人。

答案 1 :(得分:1)

这是因为您在lib中命名TS3Query.rb文件的方式。为了自动获取它,它需要与gem,ts3query.rb具有相同的名称和大小写。你有三种方法可以解决这个问题:

  1. 将文件名更改为gem
  2. 中的ts3query.rb
  3. 将ts3query.rb文件添加到您的gem并且需要'TS3Query'
  4. 将您的Gemfile更改为gem "ts3query", "~> 0.2.1", :require => "TS3Query"