রুবি ফাইল পাস করার কোনও উপায় আছে, foo.rb রেলস কনসোল এ to কনসোল ফাইল চালাতে রেলের পরিবেশ শুরু করার পরে প্রত্যাশিত ফলাফল হবে।
বা অন্য কোনও উপায় যা কমান্ড প্রম্পট থেকে ট্রিগার করে রেল পরিবেশে আমার ফাইল চালানোর অনুমতি দেবে।
রুবি ফাইল পাস করার কোনও উপায় আছে, foo.rb রেলস কনসোল এ to কনসোল ফাইল চালাতে রেলের পরিবেশ শুরু করার পরে প্রত্যাশিত ফলাফল হবে।
বা অন্য কোনও উপায় যা কমান্ড প্রম্পট থেকে ট্রিগার করে রেল পরিবেশে আমার ফাইল চালানোর অনুমতি দেবে।
উত্তর:
আসলে, সবচেয়ে সহজ পথ সঙ্গে এটি চালানোর জন্য হয় load
ভিতরেrails console
load './path/to/foo.rb'
তুমি ব্যবহার করতে পার
bundle exec rails runner "eval(File.read 'your_script.rb')"
হালনাগাদ:
আমরাও ইদানীং যা ব্যবহার করে আসছি তা হ'ল স্ক্রিপ্টের মধ্যে থেকেই রেলের পরিবেশ লোড করা। বিবেচনা করুন doit.rb
:
#!/usr/bin/env ruby
require "/path/to/rails_app/config/environment"
# ... do your stuff
স্ক্রিপ্ট বা বর্তমান কার্যকারী ডিরেক্টরি যদি রেল অ্যাপের ডিরেক্টরিতে না থাকে তবে এটিও কাজ করে।
f=File.new('path/to/file')
ব্যবহার চালানোর জন্য:f.rewind; eval f.readlines.join("\n");
eval(File.read ...)
আর অংশের দরকার নেই। rails runner
Usage: rails runner [options] [<'Some.ruby(code)'> | <filename.rb>]
rails r path/to/filename.rb
সমান মনে হচ্ছে bundle exec rails runner
।
ইতিমধ্যে, এই সমাধানটিকে সমর্থন করা হয়েছে।
rails r PATH_TO_RUBY_FILE
এখন অনেক সহজ।
একটি রেক টাস্ক তৈরি বিবেচনা করুন।
যে কোডের জন্য আমাকে রেকর্ড তৈরি করতে বা মাইগ্রেশন সমর্থন করতে হবে, উদাহরণস্বরূপ, আমি প্রায়শই এই উত্তর থেকে এর মতো একটি রেক টাস্ক তৈরি করি । উদাহরণ স্বরূপ:
ইন 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
end
এবং তারপরে টার্মিনাল রান করুন:
rake example:create_user
পূর্বে উল্লিখিত এই পদ্ধতির মধ্যে কোনওটিই পরিষ্কার এবং আদর্শ বলে মনে হয় নি যেমন আপনি কোনও স্ট্যান্ডলোন স্ক্রিপ্টটি চালানোর প্রত্যাশা করবেন না (<পুনর্নির্দেশের মাধ্যমে ইভাল-এড বা পাইপ পাবেন না), তবে শেষ পর্যন্ত এটি আমার জন্য উপযুক্ত:
(3 রেলের জন্য)
আপনার স্ক্রিপ্টের শীর্ষে সন্নিবেশ করুন:
#!/usr/bin/env ruby
APP_PATH = File.expand_path(appdir = '/srv/staging/strat/fundmgr/config/application', __FILE__)
require File.expand_path(appdir + '/../boot', __FILE__)
require APP_PATH
# set Rails.env here if desired
Rails.application.require_environment!
# your code here...
অবশ্যই, আপনার নিজের রেল অ্যাপ্লিকেশন পাথটি APP_PATH লাইনে সেট করুন।
এইভাবে, আমি কোনও ইন্টারেক্টিভ প্রবেশ করা এড়াতে পারি irb
বা উদাহরণস্বরূপ শেল প্রম্পট থেকে rails c
আমার স্ক্রিপ্ট.আরবি পরীক্ষা করতে পারি । এটি crontab এ সময়সূচী।
এটি কমান্ড-লাইন প্যারামিটারগুলিও সাবলীলভাবে সমর্থন করে এবং আপনার কোড এ যাওয়ার আগে মোড়কের স্তরকে হ্রাস করে।
ক্রেডিট (একটি রেলের 2 উদাহরণও দেখায়)
http://zerowidth.com/2011/03/18/standalone-script-runner-bin-scripts-in-rails.html
আমি যে হ্যাকটি ব্যবহার করছি তা এখানে:
rr() {
rails_root="$(bundle exec rails runner "puts Rails.root")"
rp="$(relpath "$1" "$rails_root")"
bundle exec rails runner "eval(File.read '$rp')"
}
relpath() {python -c "import os.path; print os.path.relpath('$1','${2:-$PWD}')";}
উদাহরণ:
cd ~/rails_project/app/helpers
rr my_script.rb
এখানে @ মরিটজের উত্তরের ভিত্তিতে। আমি এটি পরিবর্তন করেছি, যেহেতু এর জন্য কার্যকরী ডিরেক্টরিটিই File.read
রেল প্রকল্পের মূল।
আমি জানি এটি রুবি স্ক্রিপ্টের সাহায্যে অজগর ব্যবহার করে কিছু মারাত্মক ধর্মবিরোধী। তবে আমি relpath
রুবিতে তৈরি কোনও পদ্ধতি খুঁজে পেলাম না ।
ক্রেডিট: relpath()
@MestreLion থেকে নেওয়া হয়েছিল, বাশ ব্যবহার করে একটি বর্তমান ডিরেক্টরি দেওয়া নিখুঁত পাথকে আপেক্ষিক পথে রূপান্তর করুন