2016-09-19 22 views
2

Ruby on Rails(レールv4)でアプリを開発しています。Ruby on Railsアプリの再起動時のスクリプト実行

モデルの一部を変更し、運用環境のアプリケーションを更新して再起動すると、スクリプトによってデータを変更する必要があります。

コードが更新されたときに、スクリプトを実行するためにレールサーバーに(一度)スクリプトを実行する方法がありますか。

GemfileにGemを追加すると、バンドルを更新するまでサーバは起動しません。

+0

これは移行のためのものです。テーブルの構造を変更したり、テーブル内のデータを変更したりすることができます。 –

+0

私はmongomapperを使用しています。 – Kerby82

答えて

1

サンディエゴの答えが正しいですが、私は別のアプローチを指摘したいと思います。基本的にデータを更新するには2つの方法があります。最初のものは、Diegoの答えに記載されているような移行です。もう1つはRakeタスクです。それぞれにはいくつかの議論があります。

移行の主な利点は、Rakeタスクがコードに依存しないことです。その結果、新しい開発者がプロ​​ジェクトに参加するときに、移行を徹底的に行う必要もなく、スキーマファイルからデータベースを構築する必要もありません。

あなたは、Elle Meredithが投稿した投稿を、data migrations in Railsについて見てから、最適な方法を選択する必要があります。

+1

私はmongomapperを使用しているので、記事を読んだ後、レーキタスクは私の問題のより良い解決策です。移行は、スキーマを変更するときに使用するには便利なツールですが、データには使用しないでください。 – Kerby82

2

このオフラインスクリプトをレールの移行に配置できるように思えます。ターミナルで次のコマンドを実行します。

rails generate migration NameOfMyDataMigration 

次のようになりますdb/migrateの新しい移行スクリプトを作成します。あなた

に理にかなっている名前でNameOfMyDataMigrationを置き換えます

class NameOfMyDataMigration < ActiveRecord::Migration 
    def change 
    # your data modification logic 
    end 
end 

プロダクションにデプロイすると、次のように実行できます。

rake db:migrate 

移行は1回のみ実行されます。

は、ここではRailsのマイグレーションについては、こちらをご覧ください:http://guides.rubyonrails.org/v4.2/active_record_migrations.html

+0

これはmongomapperでも動作しますか?私はあなたがアクティブなレコードを使用する場合、このソリューションの仕事を知っています。私の場合は、2つのモデルの間に関係を割り当てる必要があり、これが行われていることを確認したいと思います。 – Kerby82

+0

mongoについては、この宝石を使用することができます:https://github.com/cheald/mongrations – DiegoSalazar

関連する問題