Передать файл скрипта в консоли рельсы
есть ли способ передать файл ruby,foo.РБ к консоли rails. Ожидаемые результаты будут после того, как консоль запускает среду rails для запуска файла.
или любым другим способом, который позволит мне выполнить файл в среде rails, вызванный из командной строки.
7 ответов:
на самом деле, самый простой способ, чтобы запустить его с
load
внутриrails console
load './path/to/foo.rb'
можно использовать
bundle exec rails runner "eval(File.read 'your_script.rb')"
обновление:
то, что мы также использовали много в последнее время, - это загрузка среды rails из самого скрипта. Рассмотрим
doit.rb
:#!/usr/bin/env ruby require "/path/to/rails_app/config/environment" # ... do your stuff
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
из этих подходов, упомянутых ранее, ни один не казался чистым и идеальным, как вы ожидали бы запуска автономного скрипта (не получить eval-ed или piped через
(рейлинг 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...
конечно, установите свой собственный путь приложения Rails в строке APP_PATH.
таким образом, я могу избежать необходимости вводить какие-либо интерактивные
irb
илиrails c
и может проверить мой сценарий.РБ из командной строки, прежде чем ЭГ. планирование его в 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 "" "$rails_root")" bundle exec rails runner "eval(File.read '$rp')" } relpath() {python -c "import os.path; print os.path.relpath('','${2:-$PWD}')";}
пример:
cd ~/rails_project/app/helpers rr my_script.rb
на основе ответа @moritz здесь. Я изменил его, так как рабочий каталог для
File.read
- это корень проекта Rails.Я знаю, что это какая-то серьезная ересь, используя python, чтобы помочь сценарию ruby. Но я не мог найти
relpath
метод, встроенный в ruby.кредит:
relpath()
был взят из @MestreLion,преобразование абсолютного пути в относительный путь с учетом текущего каталога используя Баш