データベースなしでRuby on Railsを構成する方法


102

現在データベースを必要としない小規模なWebサイトプロジェクトには、Ruby on Railsを使用すると便利です。MySQLで空のデータベースを作成してそこから移動できることは知っていますが、誰かがデータベースなしでRailsを実行するより良い方法を知っていますか?

ありがとう

回答:



108

以下のためのRails 3Railsの4

使用-O(資本「O」)または--skip-activerecordデータベースなしでアプリケーションを生成するためのオプション。

rails new myApp -O

または

rails new myApp --skip-activerecord

この回答はここから再共有されます


以下のためのRailsの5

--skip-active-recordオプションを使用して、データベースなしでアプリケーションを生成します

以前のRailsバージョンとは異なり、余分なハイフン「-」に注意してください

rails new myApp --skip-active-record


2
はい、これはRails 4で動作します:)-検証済みです。テストユニットの使用を中止したい場合:rails new myApp-O --skip-bundle -T
Chris Hough

1
ゼロから始める場合は、これが間違いなく最も簡単な方法ですが、(少なくともRails 4.0.1では)そのコマンドのアクティブとレコードの間に「-」があることに注意してください。だからそれを読む必要があります:rails new myApp --skip-active-record
Nic Benders 2013年

1
私は問題に直面し、気づきました。Rails 4.2.xの場合のみ-O機能します。このオプション--skip-activerecordは機能しません。
Nazar Hussain

これはrails-apiでも機能します:rails new myApp -O。ありがとう
Abel

2
誰かが疑問に思っているかもしれませんが、Rails 5ではそうです--skip-active-record(アクティブなnadレコード間のダッシュに注意してください)。他の方法は私にはうまくいきません。
audiodude 2016年

53

既存のRails 4/5/6プロジェクトの場合、config/application.rbファイルには次の行があります。

require 'rails/all' # or `require "rails"' in newer versions

(参考として、この行はこのファイルをロードしています
したがって、ALLをロードする代わりに、次のように各ライブラリを個別にロードする必要があります。

# active_record is what we're not going to use it, so comment it "just in case"
# require "active_record/railtie" 

# This is not loaded in rails/all but inside active_record so add it if
# you want your models work as expected
require "active_model/railtie" 
# And now the rest
require "action_controller/railtie"
require "action_mailer/railtie"
require "action_view/railtie"
require "active_job/railtie" # Only for Rails >= 4.2
require "action_cable/engine" # Only for Rails >= 5.0
require "sprockets/railtie"
require "rails/test_unit/railtie"

# All these depend on active_record, so they should be excluded also
# require "action_text/engine" # Only for Rails >= 6.0
# require "action_mailbox/engine" # Only for Rails >= 6.0
# require "active_storage/engine" # Only for Rails >= 5.2

Railsのバージョンに関して何をロードするかを知るには、コメントに目を離さないでください。
また、次のファイル(ある場合)を確認し、次の行をコメント化します。

# package.json
"@rails/activestorage": "^6.0.0",

# app/javascript/packs/application.js
require("@rails/activestorage").start()

# bin/setup
system! 'bin/rails db:prepare'

# config/environments/development.rb
config.active_storage.service = :local # For Rails >= 5.2
config.active_record.migration_error = :page_load
config.active_record.verbose_query_logs = true

# config/environments/test.rb
config.active_storage.service = :test # For Rails >= 5.2

# config/environments/production.rb
config.active_storage.service = :local # For Rails >= 5.2
config.active_record.dump_schema_after_migration = false

# spec/rails_helper.rb
ActiveRecord::Migration.maintain_test_schema!

# test/test_helper.rb
fixtures :all # In case you're using fixtures

# Only for Rails >= 5.0
#config/initializers/new_framework_defaults.rb
Rails.application.config.active_record.belongs_to_required_by_default = true

またActiveRecord::Base、モデルファイル内のすべての参照を削除します(または、該当する場合は単にファイルを削除します)。たとえば、自動生成されたapp/models/application_record.rbファイル。


2
Railsの5のために、あなたはまた、必要にしたい場合がありますactive_job/railtieaction_cable/engine
Ingmaras Keleras

2
使用するダミーのDBアダプターがないdatabase.ymlので、DBは無視されますか?
クロエ2017年

Rails 5は、active_recordがrake assets:precompile原因で失敗する問題をNoMethodError: undefined method 引き起こします '`:/
flp

3
@Chloeザ・activerecord-nulldb-adapterからgithub.com/nulldb/nulldbはあなたが一時的または低侵襲性の変化のためのアダプターを交換することができます。
Unixmonkey

1
@cdmoやあ、気づいてくれてありがとう。回答をレール6と完全に互換性があるように更新しました。私は、2のRailsアプリを作成し、それ-Oaction_mailerは関係なく、とは関係がないため、回答でコメントしたすべてについて確信がないconfig/detabase.ymlため、コメントする必要はありません。また、コメントされた後にコメントする追加の行がいくつかありますactive_storage
Alter Lagos

16

Rails 4では、新しいプロジェクトを開始するときに-Oまたは--skip-active-recordを使用できます。

rails new my_project -O
rails new my_project --skip-active-record

すでにプロジェクトを作成している場合は、コメントする必要があります

 require "active_record/railtie"

config / application.rbおよび

 config.active_record.migration_error = :page_load

config / environments / development.rbから


14

データベースが必要なければ、おそらくRailsの大部分は必要ありません。より小さなカスタマイズ可能なフレームワークを使用したい場合があります。

Sinatraは、基本的な静的ページを提供するのに最適な小さなフレームワークです。

しかし、もしあなたがRailsの使用を主張するなら、ここにそれを行う方法を示す記事があります


おかげで-これらのリンクは両方ともRails Recipesブックを参照しており、データベースなしのRailsアプリケーションでテストを実行するための手順が含まれています。私は怠惰で、すでにサーバー上にあるRailsインフラストラクチャを他のアプリに活用したいと思っていましたが、Sintatraは興味深く見えます。
RobbieCanuck 2009年

1
同意しません。Active.comは、すべてのデータがAPIから取得されるため、データベースのないRails上に構築されています。
jspooner 2013

注:最後の文の2番目のリンクは存在しません。404 not foundエラーが表示されます。
パメラクック-LightBe Corp 2017年

0

Rails 6 rc1およびactiverecord-nulldb-adaptergemをサポートするには、サルのパッチが必要です

設定/初期化子/ null_db_adapter_monkey_patches.rb

module ActiveRecord
  module ConnectionAdapters
    class NullDBAdapter < ActiveRecord::ConnectionAdapters::AbstractAdapter
      def new_table_definition(table_name = nil, is_temporary = nil)
        TableDefinition.new(table_name, is_temporary)
      end
    end
  end
end
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.