Outstanding. That looks much better. Thank you for the suggestion.

On Wed, Apr 9, 2014 at 9:18 AM, Bruno Sutic <[email protected]> wrote:

> Hi,
> ok I see. I was having similar problems (and I still have) with that
> postgresql plugin.
>
> Here's a suggestion how to push some of that logic "down" to the shell
> (changes bolded):
>
> db_exists = *test* *%Q{*mysql -u someuser -p#{pass} -e "SELECT IF(EXISTS
> (SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME =
> '#{fetch(:application)}_#{fetch(:rails_env)}'), 'Yes','No')"* | grep -q
> Yes*}
>
> With the above, you should have ruby true or false stored in the
> `db_exists` variable. That should make your capistrano task cleaner I hope.
> Here's what's been done in the above line:
>  - changed capture() with test()
>  - since you're using a lot of quotes, and there's even quote escapes, I
> suggest you change the outer quotes with %Q{...} as above. The percent
> notation with big Q is the same as double quotes (enables interpolation
> etc).
>  - notice we pipe first command to the `grep -q Yes` at the end. -q option
> means quiet. If "Yes" is passed to grep, the overall command will evaluate
> to true. If "Yes" is NOT passed to grep, then it will be false.
>
> You can see I'm using the similar trick with postgresql 
> here<https://github.com/bruno-/capistrano-postgresql/blob/master/lib/capistrano/postgresql/psql_helpers.rb#L11>.
> The difference is: you're using string 'Yes' and I'm using character 1, but
> the principle is the same.
>
> Hope that gives you more options.
>
> On Wednesday, April 9, 2014 2:29:08 PM UTC+2, Vell wrote:
>
>> Thanks Bruno.
>>
>> Unfortunately, I was not able to get test() to exit with a status 0. When
>> I did an print on the response I couldn't see anything that exited with a
>> status or any sort whether it be true, false, 0 or 1. Since I am fairly new
>> to this, I am sure the problem lies on my end.
>>
>> However, to get me not understanding (for now), I chose to pass an if
>> statement to MYSQL then check the response and act accordingly.
>>
>> task :check_db_existance do
>>     on roles(:app) do |host|
>>       pass = capture("echo $RAILS_DB_PASS").strip
>>       db_exists = capture("mysql -u someuser -p#{pass} -e \"SELECT
>> IF(EXISTS (SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE
>> SCHEMA_NAME = '#{fetch(:application)}_#{fetch(:rails_env)}'),
>> 'Yes','No')\"").split("\n").last
>>       unless db_exists == 'Yes'
>>         info "Creating #{fetch(:application)}_#{fetch(:rails_env)}"
>>         execute("mysql -u someuser -p#{pass} -e 'create database
>> #{fetch(:application)}_#{fetch(:rails_env)}'")
>>       end
>>     end
>>   end
>>
>> Honestly, I don't like it since I know there has to be a way to use `rake
>> db:create` instead of me having to pass SQL code to create the DB but for
>> now it works. I will refactor it later on when I have more time.
>>
>>
>> On Wed, Apr 9, 2014 at 7:21 AM, Bruno Sutic <[email protected]> wrote:
>>
>>> Hi,
>>> here's how I solved the same problem for postgresql:
>>> https://github.com/bruno-/capistrano-postgresql/blob/
>>> master/lib/capistrano/postgresql/psql_helpers.rb#L6-16
>>>
>>> As you can see `test` is used (in psql helper) to detect success or
>>> failure.
>>>
>>> Let me know if you need more help around this. I spent quite some time
>>> debugging and getting this to work for postgres (and I think it's still not
>>> perfect).
>>>
>>> On Friday, April 4, 2014 9:21:18 PM UTC+2, Vell wrote:
>>>>
>>>> Versions:
>>>>
>>>>    - Ruby 2.0
>>>>    - Capistrano 3.1
>>>>    - Rake / Rails / etc 4.0.4
>>>>
>>>> Platform:
>>>>
>>>>    - Working on.... mac os x
>>>>    - Deploying to... centos 6.5
>>>>
>>>> Logs:
>>>>
>>>>    - Please past logs (as completely as possible to a 3rd party
>>>>    pasting service such as pastie.org)
>>>>
>>>> Files:
>>>>
>>>>    - Capfile
>>>>    - deploy.rb
>>>>    - Stage files (production.rb, staging.rb)
>>>>
>>>> Hello all,
>>>>
>>>> I am attempting to make it so that capistrano creates a db if it
>>>> doesn't exist. Right now I am able to run the command to check for the db
>>>> but I am not able to capture the "unknown database" message that comes out
>>>> from MYSQL.
>>>>
>>>> I'm sure there is a way to do it, I just haven't figured it out the
>>>> right way to do it. The code I am starting with is below:
>>>>
>>>>   desc "check if db exists on remote server. If not create it."
>>>>   task :check_db do
>>>>     on roles(:app) do |host|
>>>>       puts "-"*100
>>>>       puts capture("mysql -usomeuser -psomepassword
>>>> #{fetch(:application)}_#{fetch(:rails_env)}")
>>>>     end
>>>>   end
>>>>
>>>> I have also tried:
>>>>
>>>> puts %x("mysql -usomeuser -psomepassword #{fetch(:application)}_#{fetch
>>>> (:rails_env)}")
>>>>
>>>> The response I get is:
>>>>
>>>> DEBUG [242e1da5] Command: mysql -usomeuser -psomepassword
>>>> app_name_dev_server
>>>> DEBUG [242e1da5] ERROR
>>>> DEBUG [242e1da5]  1049 (42000)
>>>> DEBUG [242e1da5] : Unknown database 'online_community_dev_server'
>>>>
>>>>
>>>> That last line, or even the one before it, I can't seem to catch it to
>>>> use in a condition statement.
>>>>
>>>>
>>>> Any thoughts would be greatly appreciated.
>>>>
>>>  --
>>> You received this message because you are subscribed to the Google
>>> Groups "Capistrano" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To view this discussion on the web, visit https://groups.google.com/d/
>>> msgid/capistrano/e6f569db-5514-49d2-b5d2-9ae279817dc5%40googlegroups.com<https://groups.google.com/d/msgid/capistrano/e6f569db-5514-49d2-b5d2-9ae279817dc5%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>  --
> You received this message because you are subscribed to the Google Groups
> "Capistrano" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web, visit
> https://groups.google.com/d/msgid/capistrano/0f241a2b-c31c-4b4b-8f8a-040dc376bb57%40googlegroups.com<https://groups.google.com/d/msgid/capistrano/0f241a2b-c31c-4b4b-8f8a-040dc376bb57%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Capistrano" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/capistrano/CABO-7pWWVh%3De8jCdOpOR_sJYwwj77q6Mxu0M3gC1NDeXKUxtYA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to