【问题标题】:How to run code automatically when launching a Rails console?启动 Rails 控制台时如何自动运行代码?
【发布时间】:2015-06-23 13:32:44
【问题描述】:

假设每次出现 Rails 控制台时我都想打招呼:

Scotts-MBP-4:ucode scott$ rails c
Loading development environment (Rails 4.2.1)
Hello there! I'm a custom greeting
2.1.5 :001 >

我应该把puts 'Hello there! I\'m a custom greeting' 声明放在哪里?

另一个 Stackoverflow 答案建议,我也在其他地方读过,我可以把它放在这样的初始化程序中:

# config/initializers/console_greeting.rb
if defined?(Rails::Console)
  puts 'Hello there! I\'m a custom greeting'
end

这对我不起作用 :(。即使没有 if defined?(Rails::Console) 我仍然没有得到输出。似乎初始化程序在我进入控制台时没有运行,尽管其他人建议。

【问题讨论】:

  • 我经常将它们准确地放在您指定的位置,没有if defined?(Rails::Console),并且从来没有遇到过问题......我想知道这里是否还有其他问题?
  • 当我使用rails s 运行服务器时,会显示“Hello there....”行确实。所以初始化程序正在执行。只是不是在启动控制台时。仅在启动整个服务器时。
  • bwerth@worth:~/rails/my_site$ bundle exec rails c "Devise monkey patch for v 3.4.1. Check before moving on" Loading development environment (Rails 4.0.2)
  • 可能值得一提的是p ('Devise monkey patch for v 3.4.1. Check before moving on')config/initializers/devise_minkey_patch.rb 的第一行...您还使用了哪些其他gem?记录器有什么恶作剧吗?

标签: ruby-on-rails ruby ruby-on-rails-4 rails-console ruby-on-rails-4.2


【解决方案1】:

我将 ~/.irbrc 用于类似目的(我需要在每个控制台会话中使用 gem)。比如我的.irbrc

if (defined? Rails)
  # Rails specific
end

# common for all irb sessions

您可以使用您的项目名称来限制仅在一个项目的控制台上执行代码:

if (defined? Rails) && (defined? YourProject)
  # code goes here
end

【讨论】:

  • 有没有办法让 Heroku 也能做到这一点?
【解决方案2】:

以下内容适用于 Rails 6

只需将一个块传递给Rails.application.console,例如

    # config/initializers/custom_console_message.rb
    if Rails.env.production?
      Rails.application.console do
        puts "Custom message here"
      end
    end

现在启动 rails 生产控制台时,将打印自定义消息。启动 rails server 时不会执行此代码。

如果您希望它在所有环境中运行,请删除 if Rails.env.production?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-11
    • 2015-05-11
    • 1970-01-01
    • 2019-11-21
    • 2016-09-12
    • 2015-10-17
    • 2016-11-02
    • 2014-08-08
    相关资源
    最近更新 更多