ฉันต้องการเรียกใช้ไฟล์ Ruby ในบริบทของสภาพแวดล้อม Rails รางวิ่งเกือบจะทำในสิ่งที่ฉันอยากทำ แต่ฉันขอแค่ตั้งชื่อไฟล์และอาร์กิวเมนต์ให้มัน ฉันค่อนข้างมั่นใจว่าเป็นไปได้ตั้งแต่ที่ฉันเคยทำมาก่อน ใครช่วยเตือนฉันได้ไหมว่าต้องทำอย่างไร
ฉันต้องการเรียกใช้ไฟล์ Ruby ในบริบทของสภาพแวดล้อม Rails รางวิ่งเกือบจะทำในสิ่งที่ฉันอยากทำ แต่ฉันขอแค่ตั้งชื่อไฟล์และอาร์กิวเมนต์ให้มัน ฉันค่อนข้างมั่นใจว่าเป็นไปได้ตั้งแต่ที่ฉันเคยทำมาก่อน ใครช่วยเตือนฉันได้ไหมว่าต้องทำอย่างไร
คำตอบ:
วิธีที่ง่ายที่สุดคือrails runner
เนื่องจากคุณไม่จำเป็นต้องแก้ไขสคริปต์ของคุณ
http://guides.rubyonrails.org/command_line.html#rails-runner
เพียงแค่พูดว่า rails runner script.rb
เพียงแค่ต้องการenvironment.rb
ในสคริปต์ของคุณ หากสคริปต์ของคุณอยู่ในscript
ไดเร็กทอรีของแอพ Rails ให้ทำ
require File.expand_path('../../config/environment', __FILE__)
คุณสามารถควบคุมสภาพแวดล้อมที่ใช้ (การพัฒนา / ทดสอบ / การผลิต) โดยตั้งค่าRAILS_ENV
ตัวแปรสภาพแวดล้อมเมื่อรันสคริปต์
RAILS_ENV=production ruby script/test.rb
app/script
ไดเรกทอรี ไฟล์สภาพแวดล้อมจะถูกนำมาจากแต่ละแอพ
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! }
-------------------------------------------------------------
นี่เป็นคำถามเก่า แต่ในความคิดของฉันฉันมักพบว่าการสร้างงานคราดมีประโยชน์ ... และมันง่ายมากจริงๆ
ใน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 ระบบจะรันในขณะที่เชื่อมต่อกับฐานข้อมูลการผลิตของคุณ ฉันพบว่าสิ่งนี้มีประโยชน์อย่างยิ่งในการช่วยในการย้ายข้อมูลหรือแก้ไขตาราง