Rails ortamında bir Ruby dosyasını nasıl çalıştırırım?


106

Bir Rails ortamı bağlamında bir Ruby dosyası çalıştırmak istiyorum. rails runner neredeyse yapmak istediğimi yapıyor, ancak ona sadece dosya adını ve argümanlarını vermek istiyorum. Daha önce yaptığım için bunun mümkün olduğundan oldukça eminim. Birisi bana bunu nasıl yapacağımı hatırlatabilir mi?

Yanıtlar:



36

Sadece environment.rbkomut dosyanızda gerekli. Komut dosyanız scriptRails uygulamanızın dizininde bulunuyorsa

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

RAILS_ENVKomut dosyasını çalıştırırken ortam değişkenini ayarlayarak kullanılan ortamı (geliştirme / test / üretim) kontrol edebilirsiniz .

RAILS_ENV=production ruby script/test.rb

Yukarıdaki kodu çalıştırırsam, "home / apps / config / environment" verecektir. Aynı dizinde çalışan 2 rails uygulamam varsa ne olur? Hangi ortamı alacak? yerel kutumda bu sorunla karşılaşıyorum. nazikçe önerin
Vijay Sali

@VijaySali Komut dosyanızı dizinden çalıştırdığınızı varsayıyorum app/script. Ortam dosyası, bireysel uygulamadan alınacaktır.
iltempo

evet teşekkürler, benim için çalıştı, ben de ENV ['RAILS_ENV'] ekledim
Vijay Sali

26

Runner , Ruby kodunu etkileşimsiz olarak Rails bağlamında çalıştırır.

Gönderen rails runnerkomuta:

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'ı aşağıdaki gibi komut dosyalarınız için bir shebang satırı olarak da kullanabilirsiniz:

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

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

1
Neden sadece "/ Kullanıcılar / me / rails_project / script / rails" i tam olarak ve sadece "raylar" olarak belirlediğimde çalışıyor? TIA
iphone007

Diğer rails komutlarınız da tam yolu listelemeyi gerektiriyor mu? (ie raylar sunucusu)
colsen

@ iphone007, komut dosyasını nereden çalıştırdığınıza bağlı olabilir.
David Benler

7

Bu eski bir soru, ancak bence genellikle bir komisyon görevi oluşturmayı yararlı buluyorum ... ve aslında çok kolay.

İçinde 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

Ve sonra terminalde çalıştırın:

rake example:create_user

Yerel olarak bu, geliştirme veritabanınız bağlamında çalıştırılacak ve Heroku üzerinde çalıştırılırsa, üretim veritabanınıza bağlıyken çalıştırılacaktır. Bunu özellikle geçişlere veya değiştirilmiş tablolara yardımcı olmak için yararlı buluyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.