code

Rails 콘솔에 루비 스크립트 파일 전달

codestyles 2020. 8. 17. 08:57
반응형

Rails 콘솔에 루비 스크립트 파일 전달


루비 파일 foo.rb 를 레일스 콘솔 에 전달하는 방법이 있습니까? 예상 결과는 콘솔이 파일을 실행하기 위해 레일스 환경을 시작한 후입니다.

또는 명령 프롬프트에서 트리거되는 레일스 환경에서 파일을 실행할 수있는 다른 방법.


실제로 가장 간단한 방법은 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 앱의 디렉토리 내에 있지 않은 경우에도 작동합니다.


그 동안이 솔루션이 지원되었습니다.

rails r PATH_TO_RUBY_FILE

이제 훨씬 간단합니다.


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

간단하고, 더럽고, 마지막에 프로세스를 차단하지만 내가 원하는대로 정확하게 작업을 수행합니다.


레이크 작업 생성을 고려하십시오.

예를 들어 레코드를 생성하거나 마이그레이션을 지원해야하는 코드의 경우이 답변 에서 이와 같은 레이크 작업을 생성하는 경우가 많습니다 . 예를 들면 :

에서 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 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를 사용하여 현재 디렉토리가 주어진 경우 절대 경로를 상대 경로로 변환

참고 URL : https://stackoverflow.com/questions/10313181/pass-ruby-script-file-to-rails-console

반응형