将ruby脚本文件传递给rails控制台

Har*_*ina 103 ruby-on-rails-3

有没有办法将ruby文件,foo.rb传递给rails控制台.预期结果将在控制台启动rails环境后运行文件.

或者任何其他允许我在rails环境中执行文件的方法,从命令提示符触发.

Adr*_*ian 150

实际上,最简单的方法是在load里面运行它rails console

 load './path/to/foo.rb'
Run Code Online (Sandbox Code Playgroud)

  • 这非常有效.但除非我做错了什么,否则你无法访问脚本中创建的对象.有办法吗?用例是设置一些对象,然后以交互方式探索它们.那可能吗? (4认同)
  • 菜鸟帮助:./path - 是相对于文件所在的 rails 项目的路径。 (2认同)

mor*_*itz 83

您可以使用

bundle exec rails runner "eval(File.read 'your_script.rb')"
Run Code Online (Sandbox Code Playgroud)

更新:

我们最近一直在使用的是从脚本本身加载rails环境.考虑doit.rb:

#!/usr/bin/env ruby

require "/path/to/rails_app/config/environment"

# ... do your stuff
Run Code Online (Sandbox Code Playgroud)

如果脚本或当前工作目录不在rails应用程序的目录中,这也适用.

  • 脚本/跑步者"eval(File.read'the your_script.rb')"for rails 2.3 :) (2认同)
  • 您可以使用类似的模式在控制台内运行文件:`f = File.new('path/to/file')`运行使用:`f.rewind; eval f.readlines.join("\n");` (2认同)
  • 仅供参考,你不再需要`eval(File.read ...)`部分了.Rails接受一个Ruby文件作为`rails runner`的参数:`用法:rails runner [options] [<'Some.ruby(code)'> | <filename.rb>]` (2认同)

Har*_*ina 42

与此同时,该解决方案得到了支持.

rails r PATH_TO_RUBY_FILE
Run Code Online (Sandbox Code Playgroud)

现在简单得多.


小智 5

script/console --irb=pry < test.rb > test.log
Run Code Online (Sandbox Code Playgroud)

简单,肮脏,并在最后阻止该过程,但它完全按照我的意愿完成了工作。


Mat*_*att 5

考虑创建一个 rake 任务。

例如,对于我需要创建记录或支持迁移的代码,我经常从这个答案中创建一个这样的 rake 任务。例如:

lib/tasks/example.rake

namespace :example do
  desc "Sample description you'd see if you ran: 'rake --tasks' in the terminal"
  task create_user: :environment do
    User.create! first_name: "Foo", last_name: "Bar"
  end
end
Run Code Online (Sandbox Code Playgroud)

然后在终端运行:

rake example:create_user
Run Code Online (Sandbox Code Playgroud)