답변:
실제로 가장 간단한 방법은 load내부에서 실행하는 것입니다 .rails console
load './path/to/foo.rb'
당신이 사용할 수있는
bundle exec rails runner "eval(File.read 'your_script.rb')"
최신 정보:
최근에 우리가 많이 사용하고있는 것은 스크립트 자체에서 레일 환경을로드하는 것입니다. 고려 doit.rb:
#!/usr/bin/env ruby
require "/path/to/rails_app/config/environment"
# ... do your stuff
이것은 스크립트 또는 현재 작업 디렉토리가 rails 앱의 디렉토리 내에 있지 않은 경우에도 작동합니다.
f=File.new('path/to/file')을 실행할 수 있습니다. 다음 을 실행합니다.f.rewind; eval f.readlines.join("\n");
eval(File.read ...)더 이상 부품이 필요하지 않습니다 . Rails는 Ruby 파일을 인수로 받아들입니다 rails runner.Usage: rails runner [options] [<'Some.ruby(code)'> | <filename.rb>]
rails r path/to/filename.rb에 따라 bundle exec rails runner위에서 언급 한 명령 과 기능적으로 동일합니다 .
그 동안이 솔루션이 지원되었습니다.
rails r PATH_TO_RUBY_FILE
이제 훨씬 간단합니다.
레이크 작업 생성을 고려하십시오.
예를 들어 레코드를 생성하거나 마이그레이션을 지원해야하는 코드의 경우이 답변 에서 이와 같은 레이크 작업을 생성하는 경우가 많습니다 . 예를 들면 :
에서 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
그런 다음 터미널에서 다음을 실행하십시오.
rake example:create_user
앞서 언급 한 이러한 접근 방식 중에서 독립 실행 형 스크립트가 실행될 것으로 기대하는 것처럼 깨끗하고 이상적인 것은 없었지만 (<리디렉션을 통해 평가되거나 파이프되지 않음) 마지막으로 이것이 완벽하게 작동합니다.
(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내 테스트 할 수 있습니다 script.rb을 (가) 예를 들어 전에, 쉘 프롬프트에서. crontab에서 예약하십시오.
또한 명령 줄 매개 변수도 원활하게 지원하고 코드에 도달하기 전에 래퍼 수준을 최소화합니다.
크레딧 (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
여기 @moritz의 답변을 기반으로합니다. 작업 디렉토리 File.read가 Rails 프로젝트 루트 이기 때문에 변경했습니다 .
나는 이것이 루비 스크립트를 돕기 위해 파이썬을 사용하는 심각한 이단이라는 것을 알고 있습니다. 하지만 relpath루비에 내장 된 방법을 찾을 수 없었 습니다.
크레딧 : relpath()@MestreLion에서 가져 왔습니다 . Bash를 사용하여 현재 디렉토리가 주어진 경우 절대 경로를 상대 경로로 변환