【问题标题】:Rails how to create an initializer inside a gemRails 如何在 gem 中创建初始化程序
【发布时间】:2013-04-06 22:18:56
【问题描述】:

我正在尝试在 Rails 3 中构建一个 gem,并在其中尝试传递一个初始化程序:

Credentials.configure do |config|
  file = File.read("#{Rails.root}/config/twitter.yaml")
  file_config = YAML.load(file)

  config.consumer_key = file_config[Rails.env][:consumer_key]
  config.consumer_secret = file_config[Rails.env][:consumer_secret]
  config.callback_url = URI.escape(file_config[Rails.env][:callback_url])
  config.time_stamp = Time.now.to_i
end

然后我尝试这样称呼它:

Credentials.time_stamp

但我收到此错误:

uninitialized constant Twitter::Credentials

有什么问题?

谢谢

【问题讨论】:

    标签: ruby-on-rails-3 gem initializer


    【解决方案1】:

    您的 gem 首先需要在 lib/generators/your_gem_name_generator.rb 中定义一个生成器

    mkdir -p lib/generators/
    

    将您的初始化程序复制到该文件夹​​中,名称类似于twitter_credentials.rb

    然后在该文件夹中创建另一个文件,名称类似于 twitter_generator.rb,内容如下:

    class YourGemNameRailtie < Rails::Generators::Base
      source_root(File.expand_path(File.dirname(__FILE__)))
      def copy_initializer
        copy_file 'twitter_credentials.rb', 'config/initializers/twitter_credentials.rb'
      end
    end
    

    您应该在此处查看有关创建生成器的官方文档: http://guides.rubyonrails.org/generators.html

    【讨论】:

    • 但是有没有办法在 gem 中保存动态配置文件?
    • @Wahtever 只是require 吗?重新阅读问题,看来您的问题是没有 Credentials 类。您是否使用接受块以保持状态的配置类方法实现了 Credentials 类?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多