كيف أستخدم rails runner مع Gemfile في /var/www/discourse

لدي برنامج نصي يحتاج إلى تحميل بعض البيانات من sqlite3 ثم استيرادها إلى discourse.

rails runner

افترضت أنه يمكنني استخدام شيء مثل هذا في /shared/add_in_reverse.rb:

require "sqlite3"

# Open a database
db = SQLite3::Database.new "sqlite3.db"

k = 1234
db.execute( "SELECT * from foo where id = ?'", [ k ] ) do |row|
   puts row
end

title = "hello there"
u = User.find_or_create_by(username: "mexample") do |user|
   user.email = "me@example.com"
end
c = Category.find_or_create_by(name: "Something by mexample") do |category|
   category.user = u
end
Topic.create!( title: title, category: c, user: u )

ثم تشغيله باستخدام:

rails r /shared/my_custom_script.rb

ولكن هذا يفشل مع cannot load such file -- sqlite3 (LoadError)

bundler: failed to load command: script/rails (script/rails)

/usr/local/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb:38:in `require': cannot load such file -- sqlite3 (LoadError)
        from /usr/local/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb:38:in `require'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bootsnap-1.17.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:17:in `require'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/zeitwerk-2.6.12/lib/zeitwerk/kernel.rb:38:in `require'

Gemfile and bundle exec?

تذكرت أن ruby تحتاج أحيانًا إلى استخدام ملفات Gemfiles؟ لذلك، اعتقدت أنه إذا كنت داخل دليل /var/www/discourse، يمكنني إضافة bundle exec في البداية. ولكن هذا يفشل:

#  bundle exec rails r /shared/add_in_reverse.rb
fatal: detected dubious ownership in repository at '/var/www/discourse'
To add an exception for this directory, call:

        git config --global --add safe.directory /var/www/discourse
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.7/lib/active_record/connection_adapters/postgresql_adapter.rb:81:in `rescue in new_client': We could not find your database: discourse. Which can be found in the database configuration file located at config/database.yml. (ActiveRecord::NoDatabaseError)

To resolve this issue:

- Did you create the database for this app, or delete it? You may need to create your database.
- Has the database name changed? Check your database.yml config has the correct database name.
...

IMPORT=1

حسنًا. رأيت بعض الأمثلة مع IMPORT=1. هل أحتاج إلى ذلك؟

IMPORT=1 rails r /shared/add_in_reverse.rb
You are trying to install in deployment mode after changing
your Gemfile. Run `bundle install` elsewhere and add the
updated Gemfile.lock to version control.

If this is a development machine, remove the /var/www/discourse/Gemfile freeze 
by running `bundle config unset deployment`.

The list of sources changed
The dependencies in your gemfile changed

You have added to the Gemfile:
* mysql2
* redcarpet
* sqlite3 (~> 1.3, >= 1.3.13)
* ruby-bbcode-to-md
* reverse_markdown
* tiny_tds
* csv
* parallel
# IMPORT=1 bundle exec rails r /shared/add_in_reverse.rb
You are trying to install in deployment mode after changing
your Gemfile. Run `bundle install` elsewhere and add the
updated Gemfile.lock to version control.

If this is a development machine, remove the /var/www/discourse/Gemfile freeze 
by running `bundle config unset deployment`.

The list of sources changed
The dependencies in your gemfile changed

You have added to the Gemfile:
* mysql2
* redcarpet
* sqlite3 (~> 1.3, >= 1.3.13)
* ruby-bbcode-to-md
* reverse_markdown
* tiny_tds
* csv
* parallel

لم أقم بتعديل ملف Gemfile على الإطلاق؛ أنا فقط أريد استخدام sqlite المحدد في ملف Gemfile هذا.

لماذا اثنان rails/ruby؟

هل المشكلة هي أن المسار الحالي خاطئ، ويجب علي استخدام ruby المضمن؟ أرى الكثير من نسخ ruby و rails. ولكن استخدام النسخة المضمنة لا يعمل (أو لا أعرف كيفية استخدامه بشكل صحيح).

# which ruby
/usr/local/bin/ruby
# which rails
/usr/local/bin/rails
# find /var/www/discourse/ | grep ruby | grep vendor | grep bin | grep rails
/var/www/discourse/vendor/bundle/ruby/3.2.0/bin/rails

# /var/www/discourse/vendor/bundle/ruby/3.2.0/bin/rails runner /shared/add_in_reverse.rb
/usr/local/lib/ruby/site_ruby/3.2.0/rubygems.rb:264:in `find_spec_for_exe': can't find gem railties (>= 0.a) with executable rails (Gem::GemNotFoundException)
        from /usr/local/lib/ruby/site_ruby/3.2.0/rubygems.rb:283:in `activate_bin_path'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/bin/rails:25:in `<main>'

أعتقد أنه يمكنني استخدام علامات الاقتباس المائلة مع ثنائي sqlite؟ أنا أحصل على صف واحد فقط في النهاية. لكنني في حيرة من أمري لماذا ما أحاول فعله ليس سهلاً، اعتقدت أن sqlite هو قاعدة البيانات الافتراضية لجميع مشاريع rails الجديدة. هل تم تعطيله عن قصد لـ discourse؟