[How to pass argument from a script to rails...]

I have a script with which I want to create a rails app.

Then not something like:

$ rails -d mysql name_app

in terminal, but from the script.

In the script I get the app name, database etc. After some operations I would like to create the app from the script, but when I try something like

`rails"#{ARGV}"`

where ARGV = name_app-d mysql

creates the app with a name like name_app-dmysql.

How can I pass ARGV to successfully create the app? Thank you

would ARGV.join(" ") help?

Ruby is using to_s behind the scenes. Calling to_s on an array returns the values concatenated together in a string

[1,2,3].to_s

=> "123"

I have a script with which I want to create a rails app.

Then not something like:

$ rails -d mysql name_app

in terminal, but from the script.

In the script I get the app name, database etc. After some operations I would like to create the app from the script, but when I try something like

`rails"#{ARGV}"`

where ARGV = name_app-d mysql

creates the app with a name like name_app-dmysql.

How can I pass ARGV to successfully create the app? Thank you

Have you looked at what #{ARGV} evaluates to? The default to_s on
arrays just concatenates the elements, whereas you want to have a
space between them which join will do. On top of that you've put "
round that which will tell the shell 'all this should be one argument'.

Fred

Thank you for replies.

Have you looked at what #{ARGV} evaluates to?

would ARGV.join(" ") help?

Yes, this works well with a call like:

system (or sh) ("'rails' #{ARGV.join(' ')}")

but not with:

`"'rails' #{ARGV.join(' ')}"`

sh: 'rails' prova -d mysql: not found

I tried different forms, including with join. My real mistake was that I was using the notation ``

What's the difference?

Thank you for replies.

> Have you looked at what #{ARGV} evaluates to? > would ARGV.join(" ") help?

Yes, this works well with a call like:

system (or sh) ("'rails' #{ARGV.join(' ')}")

but not with:

`"'rails' #{ARGV.join(' ')}"`

sh: 'rails' prova -d mysql: not found

I tried different forms, including with join. My real mistake was that I was using the notation ``

There's nothing wrong with using ``, except that you're quoting rather excessively

`rails #{ARGV.join(' ')}`

is fine, as is

system("rails #{ARGV.join(' ')}")

but `"rails ..."` isn't. `` is already a quoting operator so you don't need the quotes (which makes the shell believe you want to run a command called "rails -d mysql some_app" (ie it will look for something whose filename is that whole string) whereas you want to run a command called "rails" but passing those arguments.

Fred

Thank you very much Frederick,

this has opened my eyes. Then, my mistake was to believe that I need "" for interpolation in ``.