【问题标题】:How to run script before every Rails console invocation?如何在每次 Rails 控制台调用之前运行脚本?
【发布时间】:2016-03-03 12:46:49
【问题描述】:

每次我想打开 Rails 控制台时,我都已经厌倦了写这行代码:

irb(main):001:0> ActsAsTenant.current_tenant = User.find(1).account

有没有办法在每次“rails c”/“irb”调用之前运行命令/脚本?

提前致谢!

【问题讨论】:

    标签: ruby-on-rails ruby irb


    【解决方案1】:

    把你要执行的代码放到你项目根目录下的.irbrc文件中:

    echo 'ActsAsTenant.current_tenant = User.find(1).account' >> .irbrc
    bundle exec rails c # ⇐ the code in .irbrc got executed
    

    旁注:使用Pry 而不是愚蠢的IRB。试试看,你永远不会回滚。

    【讨论】:

    • @mudasobwa 谢谢。我想补充一点,我们应该从本地 .irbrc 文件中执行它,否则,每次执行 irb(不是 rails 控制台)时都会出错。 Here 是说明。
    【解决方案2】:

    我写了一个extended answer to this in another question,但简短的回答是,如果你是using Rails 3 or above,你可以使用 YourApp::Application 上的控制台方法来实现它:

    module YourApp
      class Application < Rails::Application
        ...
    
        console do
          ActsAsTenant.current_tenant = User.find(1).account
        end
      end
    end
    

    【讨论】:

      【解决方案3】:

      你可以把你的设置代码放在一个 rb 文件中,例如:

      foo.rb:

      def irb_setup
          ActsAsTenant.current_tenant = User.find(1).account
      end
      

      像这样启动 irb:

      irb -r ./foo.rb 
      

      并调用方法(这将自动完成按标签)

      2.3.0 :001 > init_irb
      

      其实也许你可以直接放代码,不用任何方法,加载的时候就会执行。但我不确定这是否会起作用或与加载顺序混淆。

      【讨论】:

      • 其实这是个好主意,但是Rails控制台并没有为我们提供这个功能。我只有一个想法,只是 fork irb,添加默认自动加载,并将其传递给指定的应用程序here
      • IRB 在启动时自动执行~/.irbrc./.irbrc 文件。
      猜你喜欢
      • 2017-10-07
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-03
      • 2012-06-21
      • 2016-08-09
      相关资源
      最近更新 更多