Як запустити файл Ruby в середовищі Rails?


106

Я хочу запустити файл Ruby в контексті середовища Rails. rails runner майже робить те, що я хочу зробити, але я хотів би просто дати йому ім'я файлу та аргументи. Я впевнений, що це можливо, оскільки я це робив раніше. Може хтось нагадує мені, як це зробити?

Відповіді:



36

Просто вимагайте environment.rbу своєму сценарії. Якщо ваш скрипт знаходиться в scriptкаталозі програми Rails

require File.expand_path('../../config/environment', __FILE__)

Ви можете контролювати використовуване середовище (розробку / тест / виробництво), встановлюючи RAILS_ENVзмінну оточення під час запуску сценарію.

RAILS_ENV=production ruby script/test.rb

Якщо я запускаю вище коду, він дасть "home / apps / config / environment". Що робити, якщо у мене в одному каталозі працює 2 рейки програми. Яке середовище це займе? Я зіткнувся з цією проблемою у своєму місцевому вікні. ласкаво пропоную
Віджай Салі

@VijaySali Я припускаю, що ви запускаєте свій скрипт із app/scriptкаталогу. Файл середовища буде взято з окремого додатка.
iltempo

так, дякую, що це працювало на мене, я також додав ENV ['RAILS_ENV']
Vijay Sali

26

Runner запускає Ruby-код у контексті Rails неінтерактивно.

З rails runnerкоманди:

Usage: runner [options] ('Some.ruby(code)' or a filename)

    -e, --environment=name           Specifies the environment for the runner to operate under (test/development/production).
                                     Default: development

    -h, --help                       Show this help message.

Ви також можете використовувати runner в якості рядка shebang для своїх сценаріїв, таких як:

-------------------------------------------------------------
#!/usr/bin/env /Users/me/rails_project/script/rails runner

Product.all.each { |p| p.price *= 2 ; p.save! }
-------------------------------------------------------------

1
Чому це працює лише тоді, коли я вказую "/ Users / me / rails_project / script / rails" повністю, а не просто "рейки"? TIA
iphone007

Чи потребують також ваші інші команди рейкових переліків повний шлях? (тобто сервер
рейлів

@ iphone007 може залежати від того, з якого сценарію ви запускаєте.
Девід Молес

7

Це старе питання, але, на мою думку, мені часто здається корисним створити завдання граблі ... і насправді це дуже просто.

В 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

Локально це буде виконуватися в контексті вашої бази даних розробок, і якщо запустити на Heroku, він буде запускатися під час підключення до вашої виробничої бази даних. Я вважаю це особливо корисним для надання допомоги з міграціями чи модифікованими таблицями.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.