루비 스크립트 파일을 레일 콘솔에 전달
루비 파일, 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
'source' 카테고리의 다른 글
장고 관리자 - 특정 모델에 대해 '추가' 작업을 사용하지 않습니다. (0) | 2023.06.18 |
---|---|
통계 분석 및 보고서 작성 워크플로우 (0) | 2023.06.18 |
주피터 노트북의 커널 제거 (0) | 2023.06.13 |
암호 확인을 위한 데이터 주석 (0) | 2023.06.13 |
Flutter : 코드의 각 목록 항목 사이에 구분자를 추가하려면 어떻게 해야 합니까? (0) | 2023.06.13 |