rake setup:Ruby On Railsプロジェクトの環境を構成する

良い一日!



Signals Vs Noiseブログを読み直したときに、興味深い記事に出会いました



リポジトリからクローンを作成した後、開発のためにアプリケーションを完全に準備するrakeタスクを作成することをお勧めします。



>「レーキ設定」



>すべてのアプリには、バンドラーを実行するレーキセットアップタスクがあります。

>データベースを作成し、シードをインポートし、補助をインストールします

>ソフトウェア(最近はほとんど)または他のセットアップを行います。 だからあなたがgitするとき

>新しいアプリのクローンを作成すると、「レーキのセットアップ」があなたの面倒を見てくれることを知っています。



Ruby On Railsアプリケーションで同様のタスクを実行する方法について説明します。



アプリケーションフォルダーに移動して実行しましょう
rake -T
      
      





このコマンドは、rakeで使用可能なすべてのタスクをリストします。



 rake about # List versions of all Rails frameworks and the environment rake assets:clean # Remove old compiled assets rake assets:clobber # Remove compiled assets rake assets:environment # Load asset compile environment rake assets:precompile # Compile all the assets named in config.assets.precompile rake db:create # Create the database from DATABASE_URL or config/database.yml for the current Rails.env (use db:create:all to create all dbs in the config) rake db:drop # Drops the database using DATABASE_URL or the current Rails.env (use db:drop:all to drop all databases)
      
      





タスクを追加すると、このリストにも表示されます。



新しいRakeタスクを作成する



独自のレーキ命令を作成する場合、これを行うための3つのオプションがあります。

  1. 自分で書いてください。
  2. 別の既存のタスクからコードをコピーし、そのコードを変更します。
  3. Railsジェネレーターを使用します。


3番目のポイントを使用します。

 $ rails g task setup hello_world
      
      





彼は新しい命令のスケルトンを作成します。

lib / tasks / setup.rake

 namespace :setup do desc "TODO" task :hello_world => :environment do end end
      
      





ハローワールド



新しく作成されたタスクのトークンを見てみましょう



 namespace :setup
      
      





名前空間、それは名前空間です-これはタスクがグループ化される環境です。

RoRの例はrake db:migrate



です。dbは名前空間db



もあります



 desc "TODO"
      
      





タスクの説明。 これはオプションのコンポーネントですが、省略すると、 rake -T



による出力時にタスクは一般リストに表示されません。



 task :hello_world => :environment
      
      





:hello_world



はタスクの名前です。



=> :environment



-依存関係。 メインタスクを開始する前に、Rakeはすべての依存タスクを開始します。 この場合、RoRアセンブリに含まれているrake環境命令が起動され、データベースを使用するなど、環境に依存する操作を行うことができます。



すくいを通して世界に挨拶するのは簡単です。 タスク本体にputs 'Hello from rake!'



追加puts 'Hello from rake!'



ますputs 'Hello from rake!'



そしてそれを実行する

 $ rake setup:hello_world Hello from rake!
      
      





呼び出す



Rakeでは、 invoke



メソッドを使用して、あるタスクを別のタスクから呼び出すことができます。次に例を示します。

 Rake::Task['db:drop'].invoke
      
      





これにより、組み込みのRailsタスクを使用して、作業のためにデータベースを準備する一連の命令を作成できます。

 task :drop_database do puts "*** Drop old database ***" Rake::Task['db:drop'].invoke end task :create_database do puts "*** Create new database ***" Rake::Task['db:create'].invoke end task :migrate_database do puts "*** Do migrations ***" Rake::Task['db:migrate'].invoke end task :seed_database do puts "*** Seeding database ***" Rake::Task['db:seed'].invoke end task :create_test_database do puts "*** Setup test database ***" Rake::Task['db:test:prepare'].invoke end
      
      





古いデータベースを削除し、新しいデータベースを作成し、すべての移行を実行し、初期データを追加して、テストのベースを作成します。 これらは、すべての開発者がアプリケーションをインストールするときに行う標準アクションです。



モデルを操作する



タスク内では、Railsアプリケーションのどこでも同じようにモデルを操作できます。



私のアプリケーションには、管理者ロールを追加する方法があるUser



モデルがあります。 また、 seeds.rb



ファイルには、データベースにユーザーを作成するためのエントリがあります。 この作成されたユーザーをすぐに作成する必要があります

私は管理者であり、Railsコンソールから手動でメソッドを呼び出す必要はありませんでした。 これの実装は簡単です:

 task :set_admin_user do puts "*** Add admin role to first user ***" User.first.become_admin! end
      
      





すべてをまとめる



ファイルの最後に次のステートメントを追加します(名前空間の外側:セットアップブロック)。

 desc 'Configure the application for development.' task :setup => :environment do Rake::Task['setup:drop_database'].invoke Rake::Task['setup:create_database'].invoke Rake::Task['setup:migrate_database'].invoke Rake::Task['setup:seed_database'].invoke Rake::Task['setup:set_admin_user'].invoke Rake::Task['setup:create_test_database'].invoke end
      
      





発射!



 $ rake setup *** Drop old database *** *** Create new database *** *** Do migrations *** ... ... *** Seeding database *** *** Add admin role to first user *** *** Setup test database ***
      
      





すべてが計画通りに行きました! おめでとうございます!



おわりに



このrakeタスクを作成した後、もう1つの責任があります-このファイルを最新の状態に保つことを忘れないでください。



そして覚えておいてください-あなただけの開発者ではありません。 一部の詳細が自明であると思われる場合、別の詳細がどのように機能するかを理解する前に多くの時間を失う可能性があります。 自分自身だけでなく、同僚のためにも開発を簡素化してください。



All Articles