如何在每次运行 Rails console 之前执行脚本?

5

我很厌烦每次想打开Rails控制台时都要写这一行:

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

在每次运行"rails c"/"irb"之前是否有任何方式可以运行命令/脚本?

提前感谢!

3个回答

4
把想要执行的代码放到项目根目录下的.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 console)时都会出现错误。这里有说明。 - shunter

3

我在另一个问题中写了一个详细答案,但简短的答案是,如果你使用Rails 3或更高版本,你可以使用YourApp::Application上的console方法来实现它:

module YourApp
  class Application < Rails::Application
    ...

    console do
      ActsAsTenant.current_tenant = User.find(1).account
    end
  end
end

2
您可以将设置代码放在一个rb文件中,例如:
foo.rb:
def irb_setup
    ActsAsTenant.current_tenant = User.find(1).account
end

像这样启动irb:

irb -r ./foo.rb 

并调用该方法(按Tab键将自动完成)
2.3.0 :001 > init_irb

实际上,也许你可以直接放置代码,而不需要任何方法,当加载完成后它将被执行。但我不确定这是否会影响加载顺序。


实际上,这是一个好主意,但Rails控制台并没有为我们提供这个功能。我只有一个想法,就是分叉irb,添加默认自动加载,并将其按照此处的指定传递给应用程序。 - shunter
IRB 在启动时会自动执行 ~/.irbrc./.irbrc 文件。 - Aleksei Matiushkin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接