有没有办法将ruby文件foo.rb传递给rails控制台。预期的结果是在控制台启动rails环境后运行文件。将ruby脚本文件传递给rails控制台
或任何其他方式,这将允许我在rails环境中执行文件,从命令提示符触发。
有没有办法将ruby文件foo.rb传递给rails控制台。预期的结果是在控制台启动rails环境后运行文件。将ruby脚本文件传递给rails控制台
或任何其他方式,这将允许我在rails环境中执行文件,从命令提示符触发。
同时,该解决方案提供了支持。
rails r PATH_TO_RUBY_FILE
现在更简单了。
您可以使用
bundle exec rails runner "eval(File.read 'your_script.rb')"
UPDATE:
我们也一直在使用什么很多最近是从脚本本身内加载Rails环境。考虑doit.rb
:
#!/usr/bin/env ruby
require "/path/to/rails_app/config/environment"
# ... do your stuff
非常感谢你的工作!我正在使用Sublime Text 2,所以现在我将能够触发rails类的构建并直接在IDE中查看输出:) – 2012-04-25 15:04:22
脚本/ runner“eval(File.read'your_script.rb')”for rails 2.3 :) – valk 2012-11-20 10:30:58
你可以使用类似的模式在控制台中运行文件:'f = File.new('path/to/file')'用于运行use:'f.rewind; eval f.readlines.join(“\ n”);' – semiomant 2013-06-28 14:08:06
script/console --irb=pry <test.rb> test.log
简单的,肮脏的,并在结束阻塞进程,但它确实酷似我想要的工作。
前面提到的这些方法里面,似乎没有干净,喜欢的理想,你会期望一个独立的脚本来运行(不得到EVAL-编辑或通过<重定向管道),但最后这个完美的作品对我来说:
(为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应用程序路径。
这样的话,我可不必输入任何互动irb
或rails c
,并且可以从shell提示下测试我script.rb,如前。在crontab中调度它。
它也可以顺畅地支持命令行参数,并在获取代码之前最小化包装器的级别。
CREDIT(还示出了轨道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
方法。
信用:relpath()
从@MestreLion采取Convert absolute path into relative path given a current directory using Bash
考虑创建一个rake任务。
对于我需要创建记录或支持迁移的代码,例如,我经常创建一个类似this answer的耙子任务。例如:
在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
然后在终端运行:
rake example:create_user
[如何运行在Rails环境Ruby的文件?(HTTP的可能重复: //sackoverflow.com/ com/9757261/how-do-i-run-a-ruby-file-in-a-rails-environment) – 2016-09-07 17:27:45