Display Symfony command output in Capistrano V3 script - symfony

I use Capistrano to deploy SF projects.
So, to call a SF command, I use :
invoke 'symfony:console', :'assets:install'
Let's say I want to display command output, how can I do ? I tried with "capture" but didn't manage to make it work.
Many thanks for answers,
Nicolas

Did you install capistrano/symfony gem ?
Then call a SF command like this:
symfony_console('assetic:dump')
And set capistrano with debug log level and pretty format:
set :format, :pretty
set :log_level, :debug
At least it works for me.

Related

Docfx failing on init command

I am trying to get docfx to generate a doc website based off of a C# library and I can't seem to get any of the commands covered in the documentation to work.
On the quickstart page it states to use the following command to initialize a template docfx init -q however when I run this command I get the following error message:
'init' was not matched. Did you mean 'new'?
'-q' was not matched. Did you mean '-h'?
Required command was not provided.
Unrecognized command or argument 'init'
Unrecognized command or argument '-q'
Usage:
docfx [options] [command]
Options:
--version Show version information
-?, -h, --help Show help and usage information
Commands:
new <templateName> Creates a new docset.
restore <directory> Restores dependencies before build.
build <directory> Builds a docset.
serve <directory> Serves content in a docset.
The documentation (as far as I can tell) doesn't cover the options displayed by the tools output. I have checked a number of times now to make sure I am not going insane but I definitely downloaded the package from the page listed on the quickstart page.
Does anyone regularly use Docfx and can tell me how to go about generating the html for my library?
Looks like you're using 3.x, which is undocumented.
You can download 2.59.2 here

Current configured path for make install

How do I find the current configured path for make install?
The resources that I have read till now only describe how to overwrite it.
configure creates a file called config.log this contains near the top the configure command with the arguments that was run. You should find your --prefix argument there.
Otherwise grepping for PREFIX should get you a result.
Another solution is to use make -n install which would perform a dry run and print what make install would do without doing it.

Capifony deploy runs some commands against previous release

I'm running a Capifony deployment. However, I notice that Capifony's in-built commands are running against the previous release, whereas my custom commands are correctly targeting the current release.
For example, if I run cap -d staging deploy, I see some commands output like this (linebreaks added):
--> Updating Composer.......................................
Preparing to execute command: "sh -c 'cd /home/myproj/releases/20130924144349 &&
php composer.phar self-update'"
Execute ([Yes], No, Abort) ? |y|
You'll see that this is referring to my previous release - from 2013.
I also see commands referring to this new release's folder (from 2014):
--> Running migrations......................................
Preparing to execute command: "/home/myproj/releases/20140219150009/
app/console doctrine:migrations:migrate --no-interaction"
Execute ([Yes], No, Abort) ? |y|
In my commands, I use the #{release_path} variable, whereas looking at Capifony's code, it's using #{latest_release}. But obviously I can't change Capifony's code.
This issue against Capistrano talks about something similar, but I don't think it really helps, as again I can't change Capifony's code.
If I delete my releases folder on the server, I have a similar problem - #{latest_release} doesn't have any value, so it attempts to do things like create a folder /app/cache (since the code is something like mkdir -p #{latest_release}/app/cache).
(Assuming I don't delete the current symlink and the release folder, the specific error I see is when it fails to copy vendors: cp: cannot copy a directory, /home/myproj/current/vendor, into itself. However, this is just the symptom of the bigger problem - if it thinks the new release is actually the previous one, that explains why current also points there!)
Any ideas? I'm happy to provide extracts from my deploy.rb or staging.rb (I'm using the multistage extension) but didn't just want to dump in the whole thing, so let me know what you're interested in! Thanks
I finally got to the bottom of this one!
I had a step set to run before deployment:
before "deploy", "maintenance:enable"
This maintenance step (correctly) sets up maintenance mode on the existing site (in the example above, my 2013 one).
However, the maintenance task was referring to the previous release by using the latest_release variable. Since the step was running before deployment, latest_release did indeed refer to the 2013 release. However, once latest_release has been used, its value is set for the rest of the deployment run - so it remained set to the 2013 release!
I therefore resolved this by changing the maintenance code so that it didn't use the latest_release variable. I used current_release instead (which doesn't seem to have this side-effect). However, another approach would be to define your own variable which gets its value in the same way as latest_release would:
set :prev_release, exists?(:deploy_timestamped) ? release_path : current_release
I worked out how latest_release was being set by looking in the Capistrano code. In my environment, I could find this by doing bundle show capistrano (since it was installed with bundler), but the approach will differ for other setups.
Although the reason for my problem was quite specific, my approach may help others: I created an entirely vanilla deployment following the Capifony instructions and gradually added in features from my old deployment until it broke!

Starting with Symfony2 and creating bundles

I am trying to start use Symfony2, and i have troubles with a first step.
In the documentation I found
To create a bundle called AcmeHelloBundle (a play bundle that you'll
build in this chapter), run the following command and follow the
on-screen instructions (use all of the default options):
php app/console generate:bundle --namespace=Acme/HelloBundle
> --format=yml
and I really don’t understand where should I write this string? In which program or in which file?
As Molecule Man said, it's a command line thing. But just to give a few more details:
Open up a console window (also called a command prompt in Windows)
Type "php --version" (no quotes). It should come back with a version number. If it says something like "can't find php" then you need to set a path to php.
Change directory to your Symfony directory
Type "php app/console" If everything is working then you will see a list of available commands. There are many things you can do from the command line.
If you happen to be on a unix system then you can make console executable and just use "./app/console"
Now try creating your bundle

How to run PHPUnit Test from another directory

I have a very straightforward PHPUnit test in c:\kim\test\HelloTest.php on a Windows PC. I can execute it from within the c:\kim\test directory with the command:
phpunit HelloTest
The problem is that I can't execute it from any other directory.
As far as I know I should be able to execute this from the c:\kim directory with:
phpunit test
Also, I would have thought the following syntax would work too:
phpunit c:\kim\test
But I don't get any response from the command. Simply a blank line and then I am returned to the cursor.
I am trying to get unit tests working properly with Netbeans and I think I need to solve this problem first. Perhaps it has something to do with paths? Any ideas?
I spent quite a while trying to sort this out, per the comments above. Also tried reinstalling PHPUnit. In the end I ran up a new server, installed XAMPP, and all works fine.
If any help.
I am using makegood extension for eclipse which handle phpunit test execution with one click.
Maybe you can find similar extension for Netbeans or switch to eclipse

Resources