# Best Way to detect if you are in a migration?

**URL:** <https://www.ruby-forum.com/t/best-way-to-detect-if-you-are-in-a-migration/145771>\
**Category:** Rails\
**Created:** [August 13, 2008, 9:02pm UTC](https://www.ruby-forum.com/t/best-way-to-detect-if-you-are-in-a-migration/145771 "2008-08-13T21:02:34Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![ericgoodwin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/c68b51/32.png) [@ericgoodwin](https://www.ruby-forum.com/u/ericgoodwin)\
**Post date:** [August 13, 2008, 9:02pm UTC](https://www.ruby-forum.com/t/best-way-to-detect-if-you-are-in-a-migration/145771/1 "2008-08-13T21:02:34Z")

</div>

I have a method where I would like output to occur via “puts” only if  
its currently in the middle of a rake task or if its in the middle of a  
migration.

How can I detect if the program execution is in the context of a  
migration or a rake task?

---

<div class="post-metadata">

**Author:** ![ericgoodwin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/c68b51/32.png) [@ericgoodwin](https://www.ruby-forum.com/u/ericgoodwin)\
**Post date:** [October 8, 2008, 6:11am UTC](https://www.ruby-forum.com/t/best-way-to-detect-if-you-are-in-a-migration/145771/2 "2008-10-08T06:11:22Z")

</div>

Anybody?

---

<div class="post-metadata">

**Author:** ![ericgoodwin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/c68b51/32.png) [@ericgoodwin](https://www.ruby-forum.com/u/ericgoodwin)\
**Post date:** [October 8, 2008, 6:37am UTC](https://www.ruby-forum.com/t/best-way-to-detect-if-you-are-in-a-migration/145771/3 "2008-10-08T06:37:23Z")

</div>

On Aug 14, 3:02 am, Aryk G. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> I have a method where I would like output to occur via “puts” only if  
> its currently in the middle of a rake task or if its in the middle of a  
> migration.
> 
> ## How can I detect if the program execution is in the context of a migration or a rake task?
> 
> Posted viahttp://www.ruby-forum.com/.

Not sure about this, but I think calling self.class or self.parent  
inside a migration task (self.up and self.down) should return  
ActiveRecord::Migration.

---

<div class="post-metadata">

**Author:** ![ericgoodwin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/c68b51/32.png) [@ericgoodwin](https://www.ruby-forum.com/u/ericgoodwin)\
**Post date:** [February 9, 2009, 9:11pm UTC](https://www.ruby-forum.com/t/best-way-to-detect-if-you-are-in-a-migration/145771/4 "2009-02-09T21:11:48Z")

</div>

I im interested in this question, has somebody the answer?

---

<div class="post-metadata">

**Author:** ![ericgoodwin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/c68b51/32.png) [@ericgoodwin](https://www.ruby-forum.com/u/ericgoodwin)\
**Post date:** [October 8, 2008, 11:21am UTC](https://www.ruby-forum.com/t/best-way-to-detect-if-you-are-in-a-migration/145771/5 "2008-10-08T11:21:31Z")

</div>

right, but Im talking about deep in the code, like in an ActiveRecord  
model lets say.

---

<div class="post-metadata">

**Author:** ![ericgoodwin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/c68b51/32.png) [@ericgoodwin](https://www.ruby-forum.com/u/ericgoodwin)\
**Post date:** [February 9, 2009, 10:04pm UTC](https://www.ruby-forum.com/t/best-way-to-detect-if-you-are-in-a-migration/145771/6 "2009-02-09T22:04:41Z")

</div>

I recently posted a similar question. No answer…

[http://groups.google.com/group/rubyonrails-talk/browse\_thread/thread/5d38a62129fa63e4/a78671aa145bf278?hl=en#a78671aa145bf278](http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/5d38a62129fa63e4/a78671aa145bf278?hl=en#a78671aa145bf278)

On Feb 9, 3:11 pm, Frantisek P. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![ericgoodwin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/c68b51/32.png) [@ericgoodwin](https://www.ruby-forum.com/u/ericgoodwin)\
**Post date:** [February 10, 2009, 3:01pm UTC](https://www.ruby-forum.com/t/best-way-to-detect-if-you-are-in-a-migration/145771/7 "2009-02-10T15:01:46Z")

</div>

Hey guys, i’ve not tested it, but:

1. you are able to set environment variable when runing rake from  
commandline

2. you are able to test against ENV[:variable] in your code.

3. problem solved? 🙂

here is the inspiration:

[http://ryandaigle.com/articles/2007/6/22/using-command-line-parameters-w-rake-and-capistrano](http://ryandaigle.com/articles/2007/6/22/using-command-line-parameters-w-rake-and-capistrano)

---

<div class="post-metadata">

**Author:** ![ericgoodwin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/c68b51/32.png) [@ericgoodwin](https://www.ruby-forum.com/u/ericgoodwin)\
**Post date:** [February 10, 2009, 3:18pm UTC](https://www.ruby-forum.com/t/best-way-to-detect-if-you-are-in-a-migration/145771/8 "2009-02-10T15:18:48Z")

</div>

i once had a similar problem. in my case i wanted to skip some code  
whenever it is called from a rake task. back then i solved it the way  
Frantisek P. proposed. still working, no problems. just set your  
ENV-variable at the beginning of your rake task.

---

<div class="post-metadata">

**Author:** ![ericgoodwin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/c68b51/32.png) [@ericgoodwin](https://www.ruby-forum.com/u/ericgoodwin)\
**Post date:** [February 10, 2009, 3:04pm UTC](https://www.ruby-forum.com/t/best-way-to-detect-if-you-are-in-a-migration/145771/9 "2009-02-10T15:04:40Z")

</div>

Create your own class that inherits ActiveRecord::Migration and use  
it, defining the behavior you would like to have.

- 

Maurício Linhares  
[http://alinhavado.wordpress.com/](http://alinhavado.wordpress.com/) (pt-br) | [http://blog.codevader.com/](http://blog.codevader.com/)  
(en)

On Mon, Feb 9, 2009 at 5:11 PM, Frantisek P.
