ฉันจะเรียกใช้ไฟล์ Ruby ในสภาพแวดล้อม Rails ได้อย่างไร


108

ฉันต้องการเรียกใช้ไฟล์ Ruby ในบริบทของสภาพแวดล้อม Rails รางวิ่งเกือบจะทำในสิ่งที่ฉันอยากทำ แต่ฉันขอแค่ตั้งชื่อไฟล์และอาร์กิวเมนต์ให้มัน ฉันค่อนข้างมั่นใจว่าเป็นไปได้ตั้งแต่ที่ฉันเคยทำมาก่อน ใครช่วยเตือนฉันได้ไหมว่าต้องทำอย่างไร

คำตอบ:



37

เพียงแค่ต้องการ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 รางที่ทำงานบนไดเรกทอรีเดียวกัน จะเอาสิ่งแวดล้อมไหน ฉันกำลังประสบปัญหานี้ในกล่องภายในของฉัน ขอแนะนำ
Vijay Sali

@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.

คุณยังสามารถใช้นักวิ่งเป็นสาย shebang สำหรับสคริปต์ของคุณได้เช่นนี้:

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

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

1
เหตุใดจึงใช้งานได้เฉพาะเมื่อฉันระบุ "/ Users / me / rail_project / script / rail" แบบเต็มและไม่ใช่แค่ "ราง" เท่านั้น TIA
iphone007

คำสั่งรางอื่น ๆ ของคุณต้องการการแสดงรายการเส้นทางแบบเต็มหรือไม่? (เช่นเซิร์ฟเวอร์ราง)
colsen

@ iphone007 อาจขึ้นอยู่กับตำแหน่งที่คุณเรียกใช้สคริปต์
David Moles

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 ระบบจะรันในขณะที่เชื่อมต่อกับฐานข้อมูลการผลิตของคุณ ฉันพบว่าสิ่งนี้มีประโยชน์อย่างยิ่งในการช่วยในการย้ายข้อมูลหรือแก้ไขตาราง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.