Bagaimana cara menjalankan file Ruby di lingkungan Rails?

106

Saya ingin menjalankan file Ruby dalam konteks lingkungan Rails. rails runner hampir melakukan apa yang ingin saya lakukan, tetapi saya hanya ingin memberikan nama file dan argumennya. Saya cukup yakin ini mungkin karena saya pernah melakukannya sebelumnya. Bisakah seseorang mengingatkan saya bagaimana melakukan ini?

weicool
sumber

Jawaban:

36

Cukup minta environment.rbdalam skrip Anda. Jika skrip Anda terletak di scriptdirektori aplikasi Rails Anda lakukan

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

Anda dapat mengontrol lingkungan yang digunakan (pengembangan / pengujian / produksi) dengan menyetel RAILS_ENVvariabel lingkungan saat menjalankan skrip.

RAILS_ENV=production ruby script/test.rb
iltempo
sumber
Jika saya menjalankan kode di atas itu akan memberikan "home / apps / config / environment". Bagaimana jika saya memiliki aplikasi 2 rel yang berjalan di direktori yang sama. Lingkungan mana yang dibutuhkan? saya menghadapi masalah ini di kotak lokal saya. mohon sarankan
Vijay Sali
@VijaySali Saya berasumsi bahwa Anda menjalankan skrip Anda dari app/scriptdirektori. File lingkungan akan diambil dari aplikasi individu.
iltempo
ya terima kasih itu berhasil untuk saya, saya menambahkan ENV ['RAILS_ENV'] juga
Vijay Sali
26

Runner menjalankan kode Ruby dalam konteks Rails secara non-interaktif.

Dari rails runnerperintah:

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.

Anda juga dapat menggunakan runner sebagai baris shebang untuk skrip Anda seperti ini:

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

Product.all.each { |p| p.price *= 2 ; p.save! }
-------------------------------------------------------------
colsen
sumber
1
Mengapa ini hanya bekerja ketika saya menentukan "/ Users / me / rails_project / script / rails" secara penuh dan bukan hanya "rails"? TIA
iphone007
Apakah perintah rel Anda yang lain juga memerlukan daftar jalur lengkap? (yaitu server rel)
colsen
@ iphone007 mungkin tergantung dari mana Anda menjalankan skrip.
David Moles
7

Ini adalah pertanyaan lama, tetapi menurut pendapat saya, saya sering merasa terbantu untuk membuat tugas menyapu ... dan sebenarnya sangat mudah.

Masuk 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

Dan kemudian di terminal jalankan:

rake example:create_user

Secara lokal, ini akan dijalankan dalam konteks database pengembangan Anda, dan jika dijalankan di Heroku, ini akan dijalankan saat terhubung ke database produksi Anda. Saya menemukan ini sangat berguna untuk membantu migrasi, atau tabel yang dimodifikasi.

Matt
sumber