【问题标题】:How to require a file only for console如何仅对控制台要求文件
【发布时间】:2016-02-09 11:31:49
【问题描述】:

我有一个 Ruby 类,我将只用于控制台,它猴子修补 ActiveRecord::Base 与一些快捷方式,如 uaupdate_attribute,我不想在运行 rails server 时加载它,但只运行rails console 命令时。

实现这一点的方法是什么?

【问题讨论】:

  • 请不要用.irbrc 回答,因为我希望这仅适用于单个项目。

标签: ruby-on-rails


【解决方案1】:

rails console 定义Rails::Console

所以你可以这样做

if defined?(Rails::Console)
  # this runs only in rails console
end

另一种方法是使用config/application.rb

module MyApplication
  class Application < Rails::Application
    console do
      require 'my_console_file'
    end
  end
end

【讨论】:

  • 初始化中的文件是放置这个的好地方吗?请记住,我想猴子路径 ActiveRecord 类
  • 这似乎只适用于 Rails 3+,对 rails 2.3 有任何想法吗?
  • 初始化器听起来是个好主意。至于rails 2.3,对不起,我不知道。 Rails::Console 不是被定义了吗?
  • 嗯,我希望这能奏效,但将它放在初始化程序中似乎并不需要我想要的文件,至少在使用 Rails 4+ 弹簧化控制台时(不要'不知道如何在没有 Spring 的情况下进行测试)。编辑:这个答案对我有用:stackoverflow.com/a/31961065/337446
  • rails c 在进程中通过 Spring 预加载器运行 3170 正在加载开发环境 (Rails 5.0.1) 2.3.0 :001 > defined?(Rails::Console) => "constant"
【解决方案2】:

您可以通过复制现有环境之一并进行所需更改来设置新环境“控制台”,然后始终在该环境中启动控制台。这似乎会减少意外的副作用综合症。

【讨论】:

    猜你喜欢
    • 2016-03-08
    • 1970-01-01
    • 2021-06-05
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    相关资源
    最近更新 更多