source

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

factcode 2023. 6. 13. 22:51
반응형

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

루비 파일, 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 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
script/console --irb=pry < test.rb > test.log

단순하고, 더럽고, 마지막에 프로세스를 차단하지만, 그것은 내가 원하는 대로 정확히 작동합니다.

앞에서 언급한 이러한 접근 방식 중 독립 실행형 스크립트가 실행될 것으로 예상되는 것처럼 깨끗하고 이상적인 것은 없었습니다(< 리디렉션을 통해 평가되거나 파이프를 사용하지 않음). 하지만 마지막으로 이 방법은 완벽하게 작동합니다.

(레일 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그리고 crontab에서 예약하기 전에 셸 프롬프트에서 myscript.dll을 테스트할 수 있습니다.

명령행 매개 변수도 원활하게 지원하고 코드에 도달하기 전에 래퍼 수준을 최소화합니다.

크레디트(레일 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레일즈 프로젝트 루트입니다.

저는 이것이 루비 스크립트를 돕기 위해 파이썬을 사용하는 심각한 이단이라는 것을 알고 있습니다.하지만 찾을 수 없었습니다.relpath루비에 내장된 메서드입니다.

신용:relpath()@MestreLion에서 가져온 절대 경로를 Bash를 사용하여 현재 디렉터리가 지정된 상대 경로로 변환

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

반응형