Posted at

Railsでデータベースを利用しないアプリケーションをデプロイするためにやったこと

More than 3 years have passed since last update.


背景

データベースを利用しないアプリケーションをわざわざRailsで実装したくなる時もあると思います。

僕の場合は、バックエンドにはAPI用の別アプリケーションを使用して、react-railsを用いたフロントエンドのみのRailsアプリケーションをデプロイする必要が出たので、そのときの作業を記録します。


環境


  • Rails = 4.2.5

  • capistrano ~> 3.1


手順


  1. GemfileからDBアダプタgemの削除

  2. config/application.rbのrequire設定の変更

  3. config以下のactive_recordを使用している設定の削除

  4. test_helperのactive_recordに依存している処理の削除

  5. capistranoタスクからmigration処理の削除


1. GemfileからDBアダプタgemの削除


Gemfile


gem 'mysql2' # Remove this line
gem 'sqlite3' # Remove this line
gem 'pg' # Remove this line



2. config/application.rbのrequire設定の変更

rails/allをrequireする行があるのでこれを削除して、代わりに以下の行を足す。


config/application.rb


# require 'rails/all' # Remove this line

# Add below
%w(
action_controller
action_view
action_mailer
active_job
rails/test_unit
sprockets
)
.each do |framework|
begin
require "#{framework}/railtie"
rescue LoadError
end
end



補足

require 'rails/all'では railties/lib/rails/all.rbの以下の行が実行される


rails/all.rb

require "rails"

%w(
active_record
action_controller
action_view
action_mailer
active_job
rails/test_unit
sprockets
)
.each do |framework|
begin
require "#{framework}/railtie"
rescue LoadError
end
end


このactive_recordをrequireする処理を除いたのが上で行ったこと。


3. config以下のactive_recordを使用している設定の解除


config/application.rb


config/application.rb

module YourApp

class Application < Rails::Application
config.active_record.raise_in_transactional_callbacks = true # <= Remove this line
end
end


config/environments/{environment}.rb


config/environments/{environment}.rb

Rails.application.configure do

config.active_record.dump_schema_after_migration = false # <= Remove this line
end


4. test_helperのactive_recordに依存している処理の削除


test/test_helper.rb


class ActiveSupport::TestCase
fixtures :all # <= Remove this line
end


5. capistranoタスクからmigration処理の削除


config/deploy.rb


Rake::Task['deploy:migrate'].clear # Add this line


以上でデータベースに接続しないRailsアプリケーションをデプロイできるようになりました。