Передать файл скрипта в консоли рельсы


есть ли способ передать файл ruby,foo.РБ к консоли rails. Ожидаемые результаты будут после того, как консоль запускает среду rails для запуска файла.

или любым другим способом, который позволит мне выполнить файл в среде rails, вызванный из командной строки.

7 84

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

тем временем, это решение было поддержано.

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

из этих подходов, упомянутых ранее, ни один не казался чистым и идеальным, как вы ожидали бы запуска автономного скрипта (не получить 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,преобразование абсолютного пути в относительный путь с учетом текущего каталога используя Баш