相关疑难解决方法(0)

在Rails 4中自动加载lib文件

我在初始化程序中使用以下行在/lib开发期间在我的目录中自动加载代码:

配置/初始化/ custom.rb:

RELOAD_LIBS = Dir[Rails.root + 'lib/**/*.rb'] if Rails.env.development?
Run Code Online (Sandbox Code Playgroud)

(来自Rails 3 Quicktip:在开发模式下自动重新加载lib文件夹)

它运行良好,但在生产中使用效率太低 - 而不是在每个请求上加载库,我只想在启动时加载它们.同一篇博客还有另一篇文章描述了如何做到这一点:

配置/ application.rb中:

# Custom directories with classes and modules you want to be autoloadable.
config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]
Run Code Online (Sandbox Code Playgroud)

但是,当我切换到它时,即使在开发中,我在尝试使用lib函数时也会得到NoM​​ethodErrors.

我的一个lib文件的示例:

LIB/extensions.rb中:

Time.class_eval do
  def self.milli_stamp
    Time.now.strftime('%Y%m%d%H%M%S%L').to_i
  end
end
Run Code Online (Sandbox Code Playgroud)

调用Time.milli_stamp将抛出NoMethodError

我意识到其他人已经在SO上回答了类似的问题,但他们似乎都在处理命名约定和其他我之前不必担心的问题 - 我的lib类已经为每个请求加载工作了,我只是想改变它到per- 启动加载.这样做的正确方法是什么?

ruby-on-rails ruby-on-rails-4

226
推荐指数
3
解决办法
13万
查看次数

如何在rails中创建单例全局对象

我有一个我想创建的对象,可以在我的一个模型中访问.我把他放在哪里?我担心如果我把他放在模型类文件中,每次我创建该模型的新实例时都会创建它.我只想在启动时创建一次这个对象.这是对象:

require 'pubnub'    
publish_key   = 'fdasfs'
subscribe_key = 'sdfsdsf'
secret_key    = 'fsdfsd'
ssl_on        = false

pubnub_obj = Pubnub.new(publish_key,
                    subscribe_key,
                    secret_key,
                    ssl_on)
Run Code Online (Sandbox Code Playgroud)

我在模型中使用他这样:

class Message < ActiveRecord::Base

  def self.send_new_message_client(message)
    message = { 'some_data' => message }
    info = pubnub_obj.publish({
                            'channel' => 'testing',
                            'message' => message
                          })
    puts(info)
  end

end
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails-3

23
推荐指数
2
解决办法
2万
查看次数