রুবি স্ক্রিপ্ট ফাইলটি রেল কনসোলে পাস করুন


117

রুবি ফাইল পাস করার কোনও উপায় আছে, foo.rb রেলস কনসোল এ to কনসোল ফাইল চালাতে রেলের পরিবেশ শুরু করার পরে প্রত্যাশিত ফলাফল হবে।

বা অন্য কোনও উপায় যা কমান্ড প্রম্পট থেকে ট্রিগার করে রেল পরিবেশে আমার ফাইল চালানোর অনুমতি দেবে।


উত্তর:


166

আসলে, সবচেয়ে সহজ পথ সঙ্গে এটি চালানোর জন্য হয় loadভিতরেrails console

 load './path/to/foo.rb'

5
এটি দুর্দান্ত কাজ করে। তবে আমি যদি কিছু ভুল না করি তবে স্ক্রিপ্টের অভ্যন্তরে তৈরি করা সামগ্রীতে আপনার অ্যাক্সেস নেই। কোন উপায় আছে যে? ব্যবহারের ক্ষেত্রে কিছু অবজেক্ট সেট আপ করা হয়, তারপরে ইন্টারেক্টিভভাবে সেগুলি অন্বেষণ করুন। এটা কি সম্ভব?
ড্যান ব্যারন

1
@ ড্যানবারোন আপনি একটি ডিবাগার বা বাঁধাই করতে পারেন।প্রাই
অনুদান দিন

এটি ঠিক একটি লিস্প REPL +1 এর মতো
জিতিত

Noob সহায়তা: ./path - আপনার রেল প্রকল্পের সাথে সম্পর্কিত যেখানে আপনার ফাইলটি বাস করে।
দর্পণ

87

তুমি ব্যবহার করতে পার

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

স্ক্রিপ্ট বা বর্তমান কার্যকারী ডিরেক্টরি যদি রেল অ্যাপের ডিরেক্টরিতে না থাকে তবে এটিও কাজ করে।


অনেক ধন্যবাদ যে একটি কাজ করে! আমি সাব্লাইম টেক্সট 2 ব্যবহার করছি তাই এখন আমি রেল ক্লাসগুলির বিল্ডগুলি ট্রিগার করতে এবং সরাসরি
আইডিইতে

2
স্ক্রিপ্ট / রানার "এভাল (ফাইল.ড্রেড 'আপনার_সক্রিপট.আরবি')" রেলের জন্য ২.৩ :)
ভাল্ক

2
কনসোলের ভিতরে ফাইল চালাতে আপনি অনুরূপ প্যাটার্ন ব্যবহার করতে পারেন: f=File.new('path/to/file')ব্যবহার চালানোর জন্য:f.rewind; eval f.readlines.join("\n");
সেমিওম্যান্ট

3
এফওয়াইআই আপনার eval(File.read ...)আর অংশের দরকার নেই। rails runnerUsage: rails runner [options] [<'Some.ruby(code)'> | <filename.rb>]
রেলগুলি

আপডেট- নীচে @ হরিসক্রাজিনার উত্তর অনুসারে, উপরে বর্ণিত আদেশের সাথে কার্যত rails r path/to/filename.rbসমান মনে হচ্ছে bundle exec rails runner
রিচি থমাস


4
script/console --irb=pry < test.rb > test.log

সহজ, নোংরা এবং প্রসেসটি শেষে শেষে অবরুদ্ধ করুন, তবে এটি ঠিক যেমনটি চেয়েছিল তেমন কাজ করে।


4

একটি রেক টাস্ক তৈরি বিবেচনা করুন।

যে কোডের জন্য আমাকে রেকর্ড তৈরি করতে বা মাইগ্রেশন সমর্থন করতে হবে, উদাহরণস্বরূপ, আমি প্রায়শই এই উত্তর থেকে এর মতো একটি রেক টাস্ক তৈরি করি । উদাহরণ স্বরূপ:

ইন 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

1

পূর্বে উল্লিখিত এই পদ্ধতির মধ্যে কোনওটিই পরিষ্কার এবং আদর্শ বলে মনে হয় নি যেমন আপনি কোনও স্ট্যান্ডলোন স্ক্রিপ্টটি চালানোর প্রত্যাশা করবেন না (<পুনর্নির্দেশের মাধ্যমে ইভাল-এড বা পাইপ পাবেন না), তবে শেষ পর্যন্ত এটি আমার জন্য উপযুক্ত:

(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


0

আমি যে হ্যাকটি ব্যবহার করছি তা এখানে:

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 থেকে নেওয়া হয়েছিল, বাশ ব্যবহার করে একটি বর্তমান ডিরেক্টরি দেওয়া নিখুঁত পাথকে আপেক্ষিক পথে রূপান্তর করুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.