对于一个目前不需要数据库的小型网站项目,使用Ruby on Rails将非常方便。我知道我可以在MySQL中创建一个空数据库并从那里开始,但是有没有人知道更好的方法在没有数据库的情况下运行Rails?
谢谢
对于一个目前不需要数据库的小型网站项目,使用Ruby on Rails将非常方便。我知道我可以在MySQL中创建一个空数据库并从那里开始,但是有没有人知道更好的方法在没有数据库的情况下运行Rails?
谢谢
对于 Rails 3 和 Rails 4:
使用
-O
(大写 'O') 或--skip-activerecord
选项生成一个没有数据库的应用程序。
rails new myApp -O
或者
rails new myApp --skip-activerecord
本回答内容源自此处
对于 Rails 5:
使用
--skip-active-record
选项生成一个没有数据库的应用程序
注意与以前版本不同,多了一个连字符 '-'.
rails new myApp --skip-active-record
rails new your_app --skip-active-record
即可,但对于现有的Rails 4-7项目,在您的config/application.rb
文件中,您需要添加以下行:require 'rails/all' # or `require "rails"' in newer versions
(这一行的参考是正在加载 this file)
所以,你必须单独加载每个库,而不是全部加载,如下所示:
# active_record is what we're not going to use it, so add it comment in case
# at some point you enable it back again
# 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" # Deprecated for Rails >= 7, so add it only if you're using it
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
# 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
文件。
active_job/railtie
和action_cable/engine
。 - Ingmaras Kelerasdatabase.yml
中,难道没有一个虚拟的 DB 适配器可以使用,以便它只是忽略掉数据库吗? - Chloeactiverecord-nulldb-adapter
是从 https://github.com/nulldb/nulldb 获取的,它允许您暂时或较少地更改适配器。该适配器用于 ActiveRecord。 - UnixmonkeyPuma捕获了此错误:无法加载数据库配置: 无法加载数据库配置。没有这样的文件 - ["config/database.yml"](RuntimeError) /Users/cdm32/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/railties-6.0.1/lib/rails/application/configuration.rb:240:in \
database_configuration'
/Users/cdm32/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/railtie.rb:200:in block (2 level...
- cdmo-O
,另一个没有,并且action_mailer
与config/detabase.yml
无关,所以没有必要进行评论。此外,在注释active_storage
之后还有一些额外的行需要进行注释。 - Alter Lagos在 environment.rb
文件中取消注释此行:
config.frameworks -= [ :active_record, :active_resource, :action_mailer]
在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
为了支持Rails 6 rc1和activerecord-nulldb-adapter
gem,我们需要进行monkey patching。
在config/initializers/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
-O
选项有效。而选项--skip-activerecord
无效。 - Nazar Hussain--skip-active-record
(请注意active和record之间的破折号)。另一种方式对我不起作用。 - audioduderails new myApp -O
命令创建新应用。 - antonkronaj