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 <bruno.su...@gmail.com> 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 capistrano+unsubscr...@googlegroups.com.
> 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 capistrano+unsubscr...@googlegroups.com.
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/capistrano/CABO-7pVkzhe9%3D-wRpxKgkxXMmmee1WAM64R7VMpfkZmpethZjQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to