Not sure what other results you might expect in a "prefork-environment", vs 
a single process.

On Monday, October 26, 2015 at 2:11:03 PM UTC+1, Boris Baldassari wrote:
>
> Hi all, 
>
> I finally got it working using File::ChangeNofity instead of 
> AnyEvent::Filesys::Notify, since it needs less dependencies and is good 
> enough for my needs. The idea of watching file changes was a really good 
> one, thanks again to Jan. 
>
> I still have one question to finish that: how could I test the 
> thread-safe behaviour? When running the tests (e.g. with myapp.pl test) 
> I make the assumption that Mojolicious is using something like morbo, 
> that is a single-threaded version of the application. Is there any means 
> to either: 
> * test the app in a preforked context (by launching hypno or prefork 
> server instead of a dev one) 
> * tell the test run to use an existing web site instead of the current 
> dev? 
>
> The last option would be the best, since it would really test the app in 
> a production context. But I could not find anywhere a way to tell the 
> test agent to look for a specific url (where my dev is hosted)... Is 
> there one? 
>
> Thanks, 
>
> -- 
> Boris 
>
>
>
> Le 23/10/2015 21:10, Boris Baldassari a écrit : 
> > Le 23/10/2015 12:22, Jan Henning Thorsen a écrit : 
> >> If it's not critical that changes in the file is visible instantly, you 
> >> could do something like this: 
> > It's not critical if the changes appears after a few seconds, so the 
> > idea is good, thank you -- and thanks for the code, which is helpful. 
> > 
> > 
> >> This will make the application read the file every 30 second and update 
> >> the "dashboard" config parameter. The code could also check if the 
> >> timestamp of the json file has changed and simply not read the content 
> >> if mtime is the same. 
> > I didn't like the idea of checking a mtime each time I did a request 
> > to the data -- which would be almost each time a user displays a page. 
> > Feels like loosing the efficiency of having everything in memory. 
> > 
> >> Another idea is to use AnyEvent::Filesys::Notify instead of the 
> >> recurring timer. (There might be similar solutions, but that was the 
> one 
> >> that came to mind first) 
> > Oh, I didn't know of that one. And really like it, for it respects the 
> > data/file paradigm for understandability. 
> > It may indeed be the best solution, among other things for 
> > portability. I will give it a try, and report back to the list next 
> week. 
> > Really good advice, thanks! 
> > 
> > 
> >> About hot reloading: If you are running both the workers and manager as 
> >> the same user, then the worker can do initiate hot reload using "kill 
> >> USR2 => getppid". 
> > Yes, smart! Still GTK (Good To Know (tm)). 
> > 
> > Thanks again, 
> > 
> > 
> > -- 
> > Boris 
> > 
> >> 
> >> 
> >> On Friday, October 23, 2015 at 10:10:46 AM UTC+2, Boris Baldassari 
> >> wrote: 
> >> 
> >>     Hi Jan, 
> >> 
> >>     The app is a kind of dashboard for sw project assessment, and it 
> >>     maintains a set of data on software projects (metrics, 
> >>     meta-information, etc.). There is an analysis (i.e. an update on 
> >>     this data) started every day, plus occasional changes on user's 
> >>     initiative. So the information is not changing *heavily*. 
> >> 
> >>     My point is I *want* to maintain the data on disk as json files, 
> >>     because I believe that a data-based process (i.e. having a process 
> >>     transforming data between known states) is easier to read and 
> >>     understand for users and maintainers. 
> >>     After giving some thoughts to memcache/redis/etc. I realise I would 
> >>     have to synchronise the data on disk every time it changes, which 
> is 
> >>     quite cumbersome and not very reliable. 
> >> 
> >>     Maybe hot reloading hypnotoad would be the way to go. How could I 
> do 
> >>     that from the code itself, apart from executing shell commands? 
> >> 
> >>     Another option would be to load the data at startup, and write it 
> >>     down to the disk on shutdown (through a END sub). Not sure about 
> the 
> >>     reliability of such a solution though. 
> >> 
> >>     Any idea would be welcome. Thanks! 
> >> 
> >>     -- 
> >>     Boris 
> >> 
> >> 
> >> 
> >>     Le jeudi 22 octobre 2015 12:52:07 UTC+2, Jan Henning Thorsen a 
> >> écrit : 
> >> 
> >>         Could you give some more details/examples on what kind of 
> >>         information that is changed during run? Also, how often does 
> >>         this information change? 
> >> 
> >>         Reason for asking, is that you might come up with a far too 
> >>         complicated solution for this. 
> >> 
> >>         In some cases, it would be enough to just change the config 
> file 
> >>         and then hot reload hypnotoad, but this won't work if you're 
> >>         changing the config too often. On the other hand, reading data 
> >>         from memcache/redis/something is probably a better idea than 
> >>         trying to synchronise information internally between your 
> >> workers. 
> >> 
> >> 
> >>         On Wednesday, October 21, 2015 at 12:16:51 PM UTC+2, Boris 
> >>         Baldassari wrote: 
> >> 
> >>             Hi Ben, 
> >> 
> >>             Thank you for the quick and to-the-point answer. I guess it 
> >>             won't work either with prefork instead of hypnotoad. 
> >> 
> >>             I'll have a look at memcache and redis solutions. 
> >> 
> >>             Thanks again -- I've spent some time on this, so it's good 
> >>             to have a confirmation/statement to settle the point. 
> >> 
> >>             Have a great day! 
> >> 
> >>             -- 
> >>             boris 
> >> 
> >> 
> >> 
> >>             Le mercredi 21 octobre 2015 11:14:42 UTC+2, Ben van 
> Staveren 
> >>             a écrit : 
> >> 
> >>                 That won't work - under Hypnotoad every worker would 
> end 
> >>                 up with it's own copy, and while you would be able to 
> >>                 update values inside a single worker, it wouldn't work 
> >>                 across the entire worker pool. Consider using memcache 
> >>                 or another key/value store that's convenient (redis, 
> >>                 perhaps) to store information like that, and fetch it 
> >>                 when required. 
> >> 
> >> 
> >>                 On 10/21/2015 11:10 AM, Boris Baldassari wrote: 
> >>>                 Hiho dear Mojo folks, 
> >>> 
> >>>                 This is my first post here, so I'd like to start with 
> >>>                 a big thank you all for the work put on mojolicious. 
> >>>                 It just rocks. :-) 
> >>> 
> >>>                 I am building a full (not light) app which needs 
> >>>                 access to a set of variables (say config) stored in a 
> >>>                 dedicated module (MyApp::Model::Config). These values 
> >>>                 do change during the run, and I want all the workers 
> >>>                 to access the new values. This works very well in 
> >>>                 morbo, but as soon as I start using hypnotoad the 
> >>>                 values are not updated for all workers. As a 
> >>>                 consequence, depending on the worker serving your 
> >>>                 request you get either old or new values randomly. 
> >>> 
> >>>                 I started with a singleton helper put directly in the 
> >>>                 startup method: 
> >>>                 | 
> >>>                 $app->helper(repo =>sub{state $config 
> >>>                 =MyApp::Model::Config->new($app)}); 
> >>>                 | 
> >>>                 This doesn't resolve the issue. 
> >>> 
> >>>                 Then I read about similar problems with db connection 
> >>>                 handles, and I decided to move them out of the startup 
> >>>                 method and I added some has attributes, still in the 
> >>>                 MyApp.pl class: 
> >>>                 | 
> >>>                 has my_config =>sub{state $config 
> >>>                 =MyApp::Model::Config->new($app);}; 
> >>>                 | 
> >>>                 But it still doesn't work. 
> >>> 
> >>>                 So, how should I do that? Any advice on the design or 
> >>>                 code itself is welcome... 
> >>> 
> >>>                 Thanks in advance, 
> >>> 
> >>>                 -- 
> >>>                 Boris 
> >>>                 -- 
> >>>                 You received this message because you are subscribed 
> >>>                 to the Google Groups "Mojolicious" group. 
> >>>                 To unsubscribe from this group and stop receiving 
> >>>                 emails from it, send an email to 
> >>>                 [email protected]. 
> >>>                 To post to this group, send email to 
> >>>                 [email protected]. 
> >>>                 Visit this group at 
> >>>                 http://groups.google.com/group/mojolicious 
> >>> <http://groups.google.com/group/mojolicious>. 
> >>>                 For more options, visit 
> >>>                 https://groups.google.com/d/optout 
> >>>                 <https://groups.google.com/d/optout>. 
> >> 
> >> -- 
> >> You received this message because you are subscribed to a topic in the 
> >> Google Groups "Mojolicious" group. 
> >> To unsubscribe from this topic, visit 
> >> https://groups.google.com/d/topic/mojolicious/T9uH9a14CHM/unsubscribe. 
> >> To unsubscribe from this group and all its topics, send an email to 
> >> [email protected] 
> >> <mailto:[email protected]>. 
> >> To post to this group, send email to [email protected] 
> >> <mailto:[email protected]>. 
> >> Visit this group at http://groups.google.com/group/mojolicious. 
> >> For more options, visit https://groups.google.com/d/optout. 
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/mojolicious.
For more options, visit https://groups.google.com/d/optout.

Reply via email to