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

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

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

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

  load './path/to/foo.rb' 

您可以使用

 bundle exec rails runner "eval(File.read 'your_script.rb')" 

更新:

我们最近也使用了很多,就是从脚本本身加载rails环境。 考虑doit.rb

 #!/usr/bin/env ruby require "/path/to/rails_app/config/environment" # ... do your stuff 

同时,这个解决scheme得到了支持。

 rails r PATH_TO_RUBY_FILE 

现在更简单了。

 script/console --irb=pry < test.rb > test.log 

简单,肮脏,并最终阻止这个过程,但它完成了我想要的工作。

在前面提到的这些方法中,没有一个看起来干净和理想,就像你期望独立脚本运行一样(没有通过<redirection>进行评估或pipe道),但最后这对我来说是完美的:

(对于Rails 3)

插入脚本的顶部:

 #!/usr/bin/env ruby APP_PATH = File.expand_path(appdir = '/srv/staging/strat/fundmgr/config/application', __FILE__) require File.expand_path(appdir + '/../boot', __FILE__) require APP_PATH # set Rails.env here if desired Rails.application.require_environment! # your code here... 

当然,在APP_PATH行中设置自己的Rails应用程序path。

这样,我可以避免必须input任何交互式irbrails c并可以在shell提示符下testing我的script.rb ,例如。 在crontab中调度它。

它也可以平滑地支持命令行参数,并在获取代码之前最小化包装器的级别。

CREDIT(也显示了一个Rails 2的例子)

http://zerowidth.com/2011/03/18/standalone-script-runner-bin-scripts-in-rails.html

这里是我正在使用的黑客:

 rr() { rails_root="$(bundle exec rails runner "puts Rails.root")" rp="$(relpath "$1" "$rails_root")" bundle exec rails runner "eval(File.read '$rp')" } relpath() {python -c "import os.path; print os.path.relpath('$1','${2:-$PWD}')";} 

例:

 cd ~/rails_project/app/helpers rr my_script.rb 

基于@莫里茨的答案在这里。 我改变了它,因为File.read的工作目录是Rails项目的根目录。

我知道这是一些严重的异端,用python来帮助一个ruby脚本。 但是我找不到在ruby中内置的relpath方法。

Credit: relpath()取自@MestreLion, 使用Bash将绝对path转换为给定当前目录的相对path

考虑创build一个rake任务。

例如,对于我需要创buildlogging或支持迁移的代码,我经常创build一个类似于此答案的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 

然后在terminal运行:

 rake example:create_user