2009-08-19 6 views
1

レールアクションを外部ファイルにロードして実行する簡単な方法はありますか?Railsで外部ファイルからコマンドを実行

たとえば、データベースのテーブルの束をあらかじめ設定するための一連のレール作成メソッドを作成しようとしています。

理想的には、ファイルの存在を確認し、存在する場合はすべてのコマンドを実行し、その後ファイルを削除して再度実行されないようにするアクションを実行します。

ので、外部ファイルは基本的に次のようになります。

MyTable.create :name => "New 1" 
MyTable.create :name => "New 2" 

は、レールに達成するために、これは使いやすいですか?

いくつかの精緻化:

アイデアが特定のセットアップテーブルは、リリース後にタッチアップする必要があり、あなたが移行スクリプトを通じてそれを行うことができない場合(つまり、あなたが初期化しているということでしょうschema.rbファイルからデータベース)、あなたの可能性:

  1. すなわちadminディレクトリ
  2. ターゲットブラウザでいくつかのアクションに入れ、それを(
  3. 例えば「update_data.rb」というファイルを作成します/ admin/update_data)
  4. Railsはその後、コマンドライン・バイ・ラインを実行し、ファイルに読んでいましたし、終了したらアクションが誤って

再び実行その助けをいれなかったので、その後

  • は、ファイルを削除しますか?これは、リリース後に実行する必要がある1回限りのアクション用のファイルです。より良い方法があれば、私は確かにすべての耳です!

  • +0

    こんにちはジャスティン。あなたはあなたが解決しようとしている問題について詳しく述べることができますか?私はこれが私が知らなかった何かを学ぶか、よりよい解決策を提案するチャンスであるので、好奇心が強いです。 – Petros

    +0

    フィードバックを追加しました。ありがとうございました – jerhinesmith

    答えて

    2

    別のオプションはレーキです。あなたは、/ libにタスクに新しいファイルを作成することができます - 私たちは、あなたはあなたがすくいデシベルを実行することができ、コンソールから次に

    namespace :db do 
        desc 'Load an initial set of data' 
        task :bootstrap => :environment do 
        if your_file_exists 
         puts 'Loading data...' 
         this_is_where_the_magic_happens   
        end 
        end 
    end 
    

    をbootstrap.rake呼ぶことにします:ブートストラップ、あなたが好きならcrontabファイルとそれをスケジュールします。

    +0

    ':bootstrap =>:environment'と正確に何が表現されていますか?私はブートストラップがタスクの名前だと思っていますが、 '=>:環境'は何を追加しますか?環境は定義されていますか? – jerhinesmith

    +0

    開発モードでの呼び出し:rake db:ブートストラッププロダクションモード:rake db:bootstrap RAILS_ENV = production –

    +0

    これは意味があります。 – jerhinesmith

    1

    load("update_data.rb") 
    

    私は、これはあなたのスクリプトをロードして実行と考えています。

    関連する問題