WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Utvärdering av Phalanger 3.0 (.NET Kompilator för PHP5 med inslag av PHP6) (https://www.wn.se/forum/showthread.php?t=1058375)

Conny Westh 2013-06-28 00:24

Utvärdering av Phalanger 3.0 (.NET Kompilator för PHP5 med inslag av PHP6)
 
(Tråden är en fortsättning på diskussionen i tråden: http://www.wn.se/t1058306-15-2.html)

Jag flyttar diskussionen om Phalanger till en ny tråd för den blir lite OT i ursprungstråden. Det kan vara nyttigt att fokusera på utvärderingen utan att diskutera övriga frågor i tråden.

Conny Westh 2013-06-28 00:43

Verktyget Phalanger hittar du här: (http://phalanger.codeplex.com/).

Phalaner är med andra ord en kompilator som skapar EXE- eller DLL-filer, eller webbsidor för IIS för Microsoft .NET-miljön, av programkod som skrivits enligt PHP5- eller PHP6-syntax. Det finns vissa diskrepenseer p g a att verktyget är ganska nytt och inte testat fullt ut.

Jag har börjat testa verktyget för att se om jag kan hitta en användning för verktyget, primärt i mitt yrke som systemutvecklare.

Jag planerar att dela med mig av mina erfarenheter här i tråden. Jag uppskattar om andra finner nöje i att testa verktyget och dela med sig av sina erfarenheter här i tråden.

Jag har som mål att testa såna egenskaper som jag anser vara viktiga vid utveckling:

- Objekttänkandet (Den objektorienterade eller objektbaserade paradigmen)
- Kompilering
- Typning
- Komponenttänkande (dvs ej källkodsbaserade komponenter)
- Integration i Microsoft Visual Studio
- Kommandoradsinterface (CLI)
- Interoperabilitet med .NET-miljön
- Hur man skapar återanvändbara komponenter för PHP5- (& senare PHP6-syntax)
- Hur man skapar återanvändbara komponenter för .NET
- Hur man använder återanvändbara komponenter i PHP5- (& senare PHP6-syntax)
- Hur man använder återanvändbara komponenter i .NET

Eftersom jag inte är särskilt erfaren PHP utvecklare kommer jag inte att fokusera på egenskaper som (det får andra göra):

- Bakåtkompatibilitet med äldre PHP-syntax
- Överensstämmelse med loose typing-paradigmen
- Scriptspråks-tänket

Clarence 2013-06-28 08:53

Inslag av PHP6. Intressant.Snabb titt på deras wiki ser man att de inte ens stödjer PHP5.5. Sen undrar jag då vad som stöds från den väldigt ospikade listan på https://wiki.php.net/todo/php60 Eller du kanske hade något helt annat i åtanke? För inslag från något som inte ens finns låter lite konstigt.

Att native PHP extensions gör att man får köra allt i 32-bitar. Det skulle jag kalla produktionsodugligt för nya projekt.

Intressant att du även har omdefinierat "komponenttänkande" till att bara täcka upp stängda miljöer. Jag förstår verkligen inte varför en komponent som kan buggfixas och felsökas är mindre av en komponent, men allt för sitt syfte?

Jag är faktiskt rätt intresserad om du faktiskt finner något vettigt syfte alls för hela lösningen. Vill man köra en PHP applikation i en MS-miljö är ju PHP så öppet att du enkelt kör PHP under IIS. Därutöver verkar det mest som ett sätt att förstöra och begränsa ekosystemet och utvecklingsprocessen. Men om man som .NET utvecklare aldrig vill gilla PHP så kanske det är en bra egenskap? Men då förstår jag inte varför man inte håller sig borta helt ...

Och ta nu inte detta som ett tal för PHP (som jag jobbar med nästan varje dag) eller mot .net (som jag satt med senast igår kväll). Det är endast menat emot Phalanger som jag inte ser den minsta lilla poäng att faktiskt lära sig.

digiArt 2013-06-28 10:56

Jag har inte sett diskussionen i länkad tråd, inte heller sett, provat eller hört talas om Phalanger tidigare.

Däremot kan jag sett ett användningsområde: om man vill med PHP skapa .NET-baserade program som kan köras utan webbserver. (win8 appar eller liknande)

Fast varför inte lära sig .NET i så fall?

I övrigt håller jag med Clarence.

lubic 2013-06-28 11:07

Ser inte heller någon större vits med att "göra om" PHP-skript till .exe eller .dll-filer? Är det inte bättre att i så fall välja ett annat programmeringsspråk där detta är en mer naturlig del av sättet att utveckla för det specifika språket?

Conny Westh 2013-06-28 18:59

Nu har jag testat att skapa ett C# Class Library med en enkel class 'Hello' och en metod Say() som skriver ut en parameter på consolen.

Förutsättningen är jag har Visual studio 2010 och Phalanger 3.0 installerat.

Jag började med att skapa ett projekt för C# Class Library, koden blev så här:

Kod:

// File: CSHello.cs
using System;

namespace CSharpClassLibrary
{
        public class CSHello
        {
                int counter;
                public CSHello()
                {
                        counter = 0;
                }
                public string Say(string tell)
                {
                        this.counter++;
                        string tello = String.Format("CSharpClassLibrary.CSHello.Say(): [{1}]->[{0}]", tell, counter);
                        Console.WriteLine("{0}", tello);
                        return tello;
                }
        }
}

Sen la jag till ett Phalanger Console application i samma solution i Visual Studio med följande PHP-kod:

Kod:

<?php
// File: PhpHelloApp.php

use CSharpClassLibrary as CSharpClassLibrary;

class PhpHelloApp
{
        static function Main()
        {
                echo "Hello!\n";
                        $hello = new CSharpClassLibrary\CSHello();
                        $hello->Say("This is sent from Phalanger PHP-console-code!");
                echo "Press any key to exit...";
                fgets(STDIN);
                echo "Done.\n";

                return 0;
        }
}

?>

Därefter så la jag till en Project-referens till CSClassLibrary.

Tryckte på F5 för att testköra och så fick jag följande out put på consolen:

Kod:

Hello!
CSharpClassLibrary.CSHello.Say(): [1]->[This is sent from Phalanger PHP-console-code!]
Press any key to exit...

Det funkade med andra ord som jag förväntade mig.

Fördelen är att den som nu föredrar att arbeta med syntaxen i PHP men vill komma åt funktionalitet i .NET Framework eller länka in komponenter skrivna i .NET, nu kan göra det. Man kan med andra ord använda färdigtestade komponenter från .NET men skriva syntaxen i PHP om man gillar det.

tartareandesire 2013-06-29 00:29

Citat:

Ursprungligen postat av ConnyWesth (Inlägg 20472886)
Fördelen är att den som nu föredrar att arbeta med syntaxen i PHP men vill komma åt funktionalitet i .NET Framework eller länka in komponenter skrivna i .NET, nu kan göra det. Man kan med andra ord använda färdigtestade komponenter från .NET men skriva syntaxen i PHP om man gillar det.

Hur ofta vill man göra det? Jag har aldrig någonsin känt det behovet :) Det känns lite som att du desperat letar efter en väg att få PHP att fungera som .NET. Varför vill du då ens använda PHP?

Clarence 2013-06-30 21:26

Citat:

Ursprungligen postat av ConnyWesth (Inlägg 20472886)
Fördelen är att den som nu föredrar att arbeta med syntaxen i PHP men vill komma åt funktionalitet i .NET Framework eller länka in komponenter skrivna i .NET, nu kan göra det. Man kan med andra ord använda färdigtestade komponenter från .NET men skriva syntaxen i PHP om man gillar det.

"Färdigtestade" komponenter från .NET. Är du fortfarande övertygad om att bara komponenter med stängd källkod (och för det mesta utan öppna eller verifierbara enhetstester) som påstås vara färdiga är riktiga komponenter? Isåfall har du ju hittat ett användningsområde där. Men det bygger på en omdefinition av komponenter som iallafall inte jag tycker är vidare sund.

Nej, jag tror nog digiart var den enda som lyckades hitta en fördel här. Men också den är ju verkligen ett extremt edge case. Om man har en färdigskriven PHP app med lite UI logik och vill använda den för en metro app och råkar ha använt tillräckligt stor del kod som stöds av Phalanger så kan man kanske snabbare få ut sin metro app.

Conny Westh 2013-07-01 04:09

Citat:

Ursprungligen postat av Clarence (Inlägg 20472980)
"Färdigtestade" komponenter från .NET. Är du fortfarande övertygad om att bara komponenter med stängd källkod (och för det mesta utan öppna eller verifierbara enhetstester) som påstås vara färdiga är riktiga komponenter? Isåfall har du ju hittat ett användningsområde där. Men det bygger på en omdefinition av komponenter som iallafall inte jag tycker är vidare sund.

Nej, jag tror nog digiart var den enda som lyckades hitta en fördel här. Men också den är ju verkligen ett extremt edge case. Om man har en färdigskriven PHP app med lite UI logik och vill använda den för en metro app och råkar ha använt tillräckligt stor del kod som stöds av Phalanger så kan man kanske snabbare få ut sin metro app.

Med "färdigtestade komponenter" menar jag komponenter som man själv har utvecklat och "paketerat" till "färdigtestade komponenter". Exempel på såna kan vara DLL-filer men finns även andra varianter, men absolut vanligast är DLLer i Windows världen.

Källkod som du kopierar från ett projekt till ett annat är inte att betrakta som "återanvändning" av färdigtestade komponenter, eftersom du då öppnar upp risken att någon (du själv inräknat) går in och gör ändringar i en källkodsfil men inte i de andra 150....

Källkoden är fortfarande hur öppen man vill att den ska vara, "open source" har inget motsatsförhållande till begreppet "färdigtestade komponenter".

Jag såg även att det faktiskt finns stöd från PHP version 4.1 eller om det var 4.3 för klasserna COM, respektive DOTNET som gör att man kan instanciera Windows COM respektive DOTNET-DLLer.

När jag testade i PHP 5.5.0 nu så fick jag det dock inte att fungera, men det kan ju bero på att jag inte ställt in PHP.INI på rätt sätt, jag håller på att undersöka.

Men jag tycker Phalanger verkar lovande i alla fall.

Nu har jag installerat och kört lite objektorienterad Python (dock okompilerat) i Visual Studio så jag har inte testat hur COM och DOTNET-klasserna funkar i PHP.

Python verkar väldigt känsligt för kolumnpositioner på källkodsraderna, det är som att gå tillbaks till Cobol, som också var extremt känsligt för källkodens kolumnpositioner.

tartareandesire 2013-07-01 05:15

Med open source finns alltid "risken" att någon ändrar i din färdigtestade kod... Det är ju en av de stora fördelarna. Du måste nog allt bli lite mer flexibel och öppen om du någonsin ska kunna ta till dig PHP.

Clarence 2013-07-01 08:31

Citat:

Ursprungligen postat av ConnyWesth (Inlägg 20472996)
Med "färdigtestade komponenter" menar jag komponenter som man själv har utvecklat och "paketerat" till "färdigtestade komponenter". Exempel på såna kan vara DLL-filer men finns även andra varianter, men absolut vanligast är DLLer i Windows världen.

Källkod som du kopierar från ett projekt till ett annat är inte att betrakta som "återanvändning" av färdigtestade komponenter, eftersom du då öppnar upp risken att någon (du själv inräknat) går in och gör ändringar i en källkodsfil men inte i de andra 150....

Källkoden är fortfarande hur öppen man vill att den ska vara, "open source" har inget motsatsförhållande till begreppet "färdigtestade komponenter".

Du kan aldrig vara 100% säker mot misstag. Har du kompilerad komponent så är du inte helt säker på om personen som skapade den verkligen inte gjorde några bakåtinkompatibla ändringar trots att de endast ändrade patch version när de gjorde sin buggfix.

Med en bra arbetsstruktur har du dina bibliotek i VCS. Du har versionering av dina bibliotek. Du uttrycker explicit vilken major + minor du vill ha och uppgraderar bara patch. Externt inladdade bibliotek ligger separat och vill man göra en ändring i dom vet man att man gör ändringarna i bibliotekets källa och uppgraderar sin version utefter vad man gjort. Liksom med kompilerade komponenter går detta åt helvete om någon gör något helt galet. Att göra någon ändring i biblioteken i sitt egna projekt är precis lika dumt som att göra en ändring i en kompilerad komponents källkod för att sedan bara kompilera om och inkludera med samma version i sitt projekt.

Citat:

Ursprungligen postat av ConnyWesth (Inlägg 20472996)
Python verkar väldigt känsligt för kolumnpositioner på källkodsraderna, det är som att gå tillbaks till Cobol, som också var extremt känsligt för källkodens kolumnpositioner.

Python tillbaks till Cobol. Hoppas du inte på allvar menar att språken är jämförbara på annat sätt än så väldigt ytliga sätt som det du tog upp. Tittar du på hur Python faktiskt används så får du fram lite av dess goda egenskaper direkt, men eftersom du inte kan göra det för PHP så kanske det är svårt även med Python.

Conny Westh 2013-07-02 04:12

Citat:

Ursprungligen postat av Clarence (Inlägg 20473002)
Du kan aldrig vara 100% säker mot misstag. Har du kompilerad komponent så är du inte helt säker på om personen som skapade den verkligen inte gjorde några bakåtinkompatibla ändringar trots att de endast ändrade patch version när de gjorde sin buggfix.

Med en bra arbetsstruktur har du dina bibliotek i VCS. Du har versionering av dina bibliotek. Du uttrycker explicit vilken major + minor du vill ha och uppgraderar bara patch. Externt inladdade bibliotek ligger separat och vill man göra en ändring i dom vet man att man gör ändringarna i bibliotekets källa och uppgraderar sin version utefter vad man gjort. Liksom med kompilerade komponenter går detta åt helvete om någon gör något helt galet. Att göra någon ändring i biblioteken i sitt egna projekt är precis lika dumt som att göra en ändring i en kompilerad komponents källkod för att sedan bara kompilera om och inkludera med samma version i sitt projekt.

Jag tänker mest på hur det funkar på de stora företag jag jobbat, både som anställd och konsult (mest försäkringsbolag, banker offentliga myndigheter och konsultbolag som gör uppdrag hos dessa), då har man omfattande kvalitetstester där man efter vissa bestämda tidpunkter "låser" alla kodändringar och går in i en testprocess inför varje release, vi pratar inte om utvecklarnas tester här utan om beställarens acceptanstester och produktionstester. Då får ingen gå in i den levererade koden och göra ändringar under testfasen.

Givetvis pågår arbetet i den övriga utvecklingen, men man har en uppsättning binärfiler som ska med i n viss release som inte får ändras.

Du får tänka på att det är många personer involverade (både utvecklare, kravställare, produktionstekniker, supportpersonal m.m.) alla måste vara synkroniserade på samma kodbas. Om något ändras så måste hela testet göras om från början. Därför vill man ha järnkoll på detta.

Citat:

Ursprungligen postat av Clarence (Inlägg 20473002)
Python tillbaks till Cobol. Hoppas du inte på allvar menar att språken är jämförbara på annat sätt än så väldigt ytliga sätt som det du tog upp. Tittar du på hur Python faktiskt används så får du fram lite av dess goda egenskaper direkt, men eftersom du inte kan göra det för PHP så kanske det är svårt även med Python.

Jag håller just nu i min utvärdering på att växla mellan PHP, Python, Ruby, (kommer nog Scala och Erlang också) och jag blev smått irritaterad på att Python hade den fula egenskapen att vara känslig för källkodens kolumnpositioner, det är ingen positiv egenskap tycker jag. Det tog en stund innan jag fattade vad som var fel dessutom ....

Python är ju trots allt betydligt trevligare än PHP och Ruby betydligt trevligare än Python. Även om Python och Ruby i övrigt har snarlik syntax.

Jag upptäckte dock att Python har ändrat Syntax så man måste sätta ut paranteser på print(), i alla exempel jag hittar på internet så har man INTE parenteser så i stort sett ingen exempelkod funkar utan handpåläggning.

Nåväl jag ska inte klaga så mycket på Python för jag håller på att testa språket.

Jag har laddat ner Open Cobol (som stöder både Cobol 85 och Cobol 2002, men tyvärr har jag ingen körbar version i Windows-miljön (man måste sätta upp och kompilera med MinGW eller GCC och det har jag inte orkat, det är en massa inställningar man ska göra innan man kan kompilera och just nu orkar jag inte med det). Jag har kör den binära i Ubuntu och det funkade ju klockrent.

Det finns en gigantisk kodbas med installerad Cobolkod som är i produktion, främst inom stora företag som Banker, försäkringsbolag, myndigheter, stora börsnoterade industriföretag. Dessa proggram rullar på i sina dagliga batchar och har så gjort sedan slutet av 1950-talet/början av 1960-talet när de första Cobol-liknande dialekterna dök upp (tror Cobol blev officiellt 1963...). Det kommer ta tusentals/kanske miljontals manår att ersätta den kodbasen... Så de byts ut modul för modul och inte förrän det inte går att köra vidare.

Det funkade enkelt att länka ihop en vanlig ANSI C modul i Open Cobol.

Jag hittade en bra Tutorial för Python som jag gått igenom och testkört alla exempel. Jag fick bra koll på hur syntaxen är uppbyggd. Enkel filhantering, felhanering m.m. Har inte testat Databasacess med Python ännu.

Ruby känns betydligt större (ur teknisk synvinkel) och mer välgjort än både PHP och Python, mycket mer väl genomtänkt objekthantering. Känns som Ruby har betydligt bättre inkasling, arvsmekanismer m.m. Verkar mer okänslig för kolumnspositioner.

Har dock inte fått require("namespace") att funka, men Load("filename") funkade bra.

Hittade en riktigt bra webbplats ruby-doc.org som har gigantiskt med exempelkod, som jag håller på att traggla mig igenom.

lunarmys 2013-07-02 12:04

Citat:

Ursprungligen postat av ConnyWesth (Inlägg 20473089)
Jag håller just nu i min utvärdering på att växla mellan PHP, Python, Ruby, (kommer nog Scala och Erlang också) och jag blev smått irritaterad på att Python hade den fula egenskapen att vara känslig för källkodens kolumnpositioner, det är ingen positiv egenskap tycker jag. Det tog en stund innan jag fattade vad som var fel dessutom ....

Så det är en dålig egenskap att kräva att programmeraren indenterar/formaterar rätt?

Conny Westh 2013-07-02 12:39

Ja, programspråket ska ha en tolerans mot struntsaker, men skrika högt när man gör allvarliga fel.

Just kritiska kolumnpositioner har jag nog bara sett i Python och Cobol om jag minns rätt.

De flesta andra programspråk brukar vara flexibla mot såna triviala fel, Men i Python och Cobol så har kolumnpositionerna betydelse så då gick det inte att vara snäll för Python i det läget. ....

Clarence 2013-07-02 14:46

90% av indenteringen ser likadan ut i välskriven kod som i Python kod (notera att du oftast har valmöjligheter i var du bryter raderna i python). Sen att du tycker det är en struntsak huruvida din kod är lätt läsbar eller ej, det låter jag dig stå för (det finns ca 43243242342 undersökningar som visar på att en konsekvent indentering leder till bättre läsbarhet). Själv tycker jag inte om att de ersatt andra avgränsningstecken med tvånget av indentering - men det tror jag är för att mina ögon är så vana vid C/PHP/Java/C#/etc-tecknena. Men det är ett tydligt val som faktiskt går väldigt bra ihop med faktiska egenskaper hos programmerare.

Sen vet jag inte om du är medveten om att en versions-taggning i din VCS leder till precis samma sak som en kompilerad binär. Det är en förhållandevis självklar process om man har acceptanstester eller liknande för varje lanserad version. Binären är lite svårare att ändra i annat än byta namn och i värsta fall göra den oidentifierbar eller obrukbar, taggningen är lättare att följa då man kan ta sig en titt i historyn om någon ändrat något (en tagg är en tagg är en tagg, den SKALL ej förändras. För versioner under arbete använder man branches.)

tartareandesire 2013-07-02 14:53

Citat:

Ursprungligen postat av ConnyWesth (Inlägg 20473089)
Jag tänker mest på hur det funkar på de stora företag jag jobbat, både som anställd och konsult (mest försäkringsbolag, banker offentliga myndigheter och konsultbolag som gör uppdrag hos dessa), då har man omfattande kvalitetstester där man efter vissa bestämda tidpunkter "låser" alla kodändringar och går in i en testprocess inför varje release, vi pratar inte om utvecklarnas tester här utan om beställarens acceptanstester och produktionstester. Då får ingen gå in i den levererade koden och göra ändringar under testfasen.

Sådana tungrodda företag och organisationer är knappast typiska för modern webbutveckling utan är extremfall där man inte sällan har extrema säkerhetskrav men även där försöker man idag banta organisationer och spara pengar. Den typen av utveckling kan hur som helst aldrig motiveras ekonomiskt i en mer normal verksamhet.

Citat:

Ursprungligen postat av ConnyWesth (Inlägg 20473089)
Du får tänka på att det är många personer involverade (både utvecklare, kravställare, produktionstekniker, supportpersonal m.m.) alla måste vara synkroniserade på samma kodbas. Om något ändras så måste hela testet göras om från början. Därför vill man ha järnkoll på detta.

Arbetar man med versionshantering så använder samtliga samma kodbas oavsett vilket språk det handlar om.

Citat:

Ursprungligen postat av ConnyWesth (Inlägg 20473089)
Ruby känns betydligt större (ur teknisk synvinkel) och mer välgjort än både PHP och Python, mycket mer väl genomtänkt objekthantering. Känns som Ruby har betydligt bättre inkasling, arvsmekanismer m.m. Verkar mer okänslig för kolumnspositioner.

Återigen, objekthanteringen ligger inte i PHP utan hos användaren. Det känns som att du hela tiden förväntar dig att PHP ska fungera som ett strikt ramverk som tvingar dig göra si eller så. PHP är inget ramverk men du kan testa till exempel Symfony 2 om du önskar. Fullgott stöd för objekt, arv, inkapsling, abstraktion osv. finns numera i PHP. Du kan ställa precis vilka krav du vill i din utveckling men det är du själv som utvecklare som sätter gränserna och inte språket. Detta är mycket användbart i modern agil webbutveckling där flexibilitet är viktigare än begränsningar.

Conny Westh 2013-07-02 20:06

Citat:

Ursprungligen postat av Clarence (Inlägg 20473159)
90% av indenteringen ser likadan ut i välskriven kod som i Python kod (notera att du oftast har valmöjligheter i var du bryter raderna i python). Sen att du tycker det är en struntsak huruvida din kod är lätt läsbar eller ej, det låter jag dig stå för (det finns ca 43243242342 undersökningar som visar på att en konsekvent indentering leder till bättre läsbarhet). Själv tycker jag inte om att de ersatt andra avgränsningstecken med tvånget av indentering - men det tror jag är för att mina ögon är så vana vid C/PHP/Java/C#/etc-tecknena. Men det är ett tydligt val som faktiskt går väldigt bra ihop med faktiska egenskaper hos programmerare.

Jag är för egen del ganska petig med indentering och placering av klamrar och parenteser i koden, men det stämde inte överens med vad Python anser trots att koden var tydligt indenterad/strukturerad. Men en teckenposition (dvs ett mellanslag för lite eller för mycket) hit eller dit så blev det körfel i runtime....

Python skrek högt om jag använde {tab} i stället för {space} för indenteringen, jag var tvungen att slå på automatisk omvandling till {space} för {tab}-tecknen för att det skulle gå att köra koden. Om jag minns rätt så är inte ens Cobol lika kinkig om man använder {tab} eller {space} vid indentering.

Ruby verkar vara betydligt mer generös med definitionen och toleransen av whitespace....

Jag har dock fortfarande problem med require i Ruby, får det bara inte att fungera.... Filerna ligger i samma katalog. Jag har PATH till Ruby Bin-katalog, alla annan kod jag testkör med Ruby funkar klockrent "load" funkar men inte "require". Vad gör jag för fel? Jag kör version 2.0.0p195 från 2013-05-14.

Kod:

# File: Trig.rb
# Date: 2013-07-01
# Purpose: Trogonometry, include this namespace with require...

=begin
    This is a multiline comment in Ruby
=end

module Trig
  PI = 3.14159265358979

  def Trig.sin(x)
  # ..
  return x
  end
  def Trig.cos(x)
  # ..
  return x
  end
end

Kod:

# File: TrigTest.rb
# Date: 2013-07-01
# Purpose: Trogonometry, Test to include Component with require...

=begin
    This is a multiline comment in Ruby
=end

#load "Trig.rb"
#load "Action.rb"

require("Trig")
require "Action"

y = Trig.sin(Trig::PI/4)
wrongdoing = Action.sin(Action::VERY_BAD)
puts(Trig::PI)

shit jag hittade felet, jag ska köra require_relative.... Då funkar det som jag tänkt....

Clarence 2013-07-03 08:36

Citat:

Ursprungligen postat av ConnyWesth (Inlägg 20473195)
Jag är för egen del ganska petig med indentering och placering av klamrar och parenteser i koden, men det stämde inte överens med vad Python anser trots att koden var tydligt indenterad/strukturerad. Men en teckenposition (dvs ett mellanslag för lite eller för mycket) hit eller dit så blev det körfel i runtime....

Python skrek högt om jag använde {tab} i stället för {space} för indenteringen, jag var tvungen att slå på automatisk omvandling till {space} för {tab}-tecknen för att det skulle gå att köra koden. Om jag minns rätt så är inte ens Cobol lika kinkig om man använder {tab} eller {space} vid indentering.

Python gnäller väl bara om du blandar space-indentering och tabb-indentering? Och gör du det kan du få en rejäl röra mellan olika editorer då en tabs representation inte är fast medans spaces är det. Sen går det väl också lätt att stänga av denna varning om du vill skriva dålig kod.

Sen bör du ändå följa PEP8 om du skriver Python. Vilken säger åt dig att använda spaces (för att dess representation är konsekvent). Du ställer helt enkelt in din editor att använda spaces när du trycker på tab. Denna best practice återfinns i många style guidelines för en mängd språk.

Att du får runtime errors med rent felaktig indentering är väl rätt självklart. Om alla dina avgränsare är indentering så kan man väl förvänta sig att de är korrekta. Annat är väl ungefär som att tycka att ) ska kunna ersätta } i C# när det ändå inte finns någon starting (.

Conny Westh 2013-07-03 10:37

Just nu håller jag på med Ruby, gillar det bättre, men nu så har jag ett nytt dilemma, vilken databas API-ska jag använda? Har kollat på en del olika men RDBI verkar vara den senaste jag hittat, dock verkar den lite personberoende då det verkar vara 1 person som heter Eric Hollenbe som gör 99% av allt jobb.

De senaste 3 åren verkar det inte hänt så mycket i det projektet.

Frågan är om det finns ett annat API för databaser som är lämpligare?

Linuus 2013-07-03 13:26

Citat:

Ursprungligen postat av ConnyWesth (Inlägg 20473234)
Just nu håller jag på med Ruby, gillar det bättre, men nu så har jag ett nytt dilemma, vilken databas API-ska jag använda? Har kollat på en del olika men RDBI verkar vara den senaste jag hittat, dock verkar den lite personberoende då det verkar vara 1 person som heter Eric Hollenbe som gör 99% av allt jobb.

De senaste 3 åren verkar det inte hänt så mycket i det projektet.

Frågan är om det finns ett annat API för databaser som är lämpligare?

Vad använder du för databas?
Postgres: http://rubygems.org/gems/pg
MongoDB: http://rubygems.org/gems/mongo
MySQL: http://rubygems.org/gems/mysql

Conny Westh 2013-07-03 13:56

Jag använder MS SQL-Server, Access, MySQL.

Jag kör Windows 7 som operativ.

Linuus 2013-07-03 14:09

Citat:

Ursprungligen postat av ConnyWesth (Inlägg 20473256)
Jag använder MS SQL-Server, Access, MySQL.

Jag kör Windows 7 som operativ.

1. Windows brukar inte rekommenderas för Ruby-utveckling. Skulle rekommendera Linux istället (eller OSX såklart :) ).

2. MS SQL-Server lirar nog inte så bra med Ruby. Prova med MySQL det ska funka bra!

Conny Westh 2013-07-03 20:39

Citat:

Ursprungligen postat av Linuus (Inlägg 20473261)
1. Windows brukar inte rekommenderas för Ruby-utveckling. Skulle rekommendera Linux istället (eller OSX såklart :) ).

2. MS SQL-Server lirar nog inte så bra med Ruby. Prova med MySQL det ska funka bra!

Linux är inte ett alternativ, men jag har kört installetionsprogrammet för MySql som du hade länk till.

Jag var först tvungen att installera DevKit, vilket är gjort, sen fick man upp något nytt kommandofönster och sen körde jag typ

$ gem install mysql <ENTER>

...sen sa att driver för MySql är successfully installed, men inget av de exempelkoder jag kört funkar.

Det gnäller på att det inte finns någon namespace rdbi/dbi....

Har sökt men inte hittat filen libmysql.dll i min Ryby installetion (c:\Program Files (x86)\Ruby200...).

enligt doc så ska jag lägga filen libmysql.dll i ryby\bin.... men jag hittar inte libmysql.dll någonstans....

finns några *.rb-filer i driver-katalogen som jag lagt upp, men det var en helt USEL dokumentation och dokumentationen stämmer inte med verkligheten....

Jag har nu ägnat halva dagen åt att hitta en lösning för att köra mot MySQL i Ruby.... Jag känner mig frustrerad....

tartareandesire 2013-07-03 20:56

libmysql.dll hittar du i din MySQL-installation, inte i Ruby.

Conny Westh 2013-07-03 22:29

Citat:

Ursprungligen postat av tartareandesire (Inlägg 20473310)
libmysql.dll hittar du i din MySQL-installation, inte i Ruby.

Ok, då fattar jag....

Trodde det var rdbi, interface mot MySQL.....


Men den gnäller fortfarande på namespace....

Följande kod har jag att testa med:

Kod:

#!ruby20
# encoding: utf-8

=begin
= Description
    The DBI package is a vendor independent interface for accessing databases.
    It is similar, but not identical to, Perl's DBI module.
   
    <DDL-script>
        delimiter $$
   
        CREATE TABLE `players`
        (
          `id` int(11) NOT NULL AUTO_INCREMENT,
          `firstname` varchar(32) NOT NULL,
          `lastname` varchar(32) NOT NULL,
          PRIMARY KEY (`id`)
        ) ENGINE=InnoDB AUTO_INCREMENT=430 DEFAULT CHARSET=latin1$$
    </DDL-script>

= Synopsis
=end

require 'rdbi\dbi'

# Same example, but a little more Ruby-ish
class Main
    def initialize()   
        @connectionstring = 'DBI:Mysql:test'
        @user = 'root'
        @password = '**************'
        test()
    end
    def test()
        @dbh = connect()
        select()
    end
    def connect()
        DBI.connect(connectionstring, user, password) do | dbh |
        return dbh
    end
    def select()       
        @dbh.select_all('select * from players') do | row |
            puts row
        end
    end
end

Main.new()


Jag har lagt in lib filerna från "rdbi-1.2.0.pre0" till Rubys lib-katalog.
Har även lagt in lib-filerna från "rdbi-driver-mysql-master" till Rubys lib-katalog.
Har även kopierat in libmysql.dll i Ruby\bin från MySQL\lib.

Men namespace rdbi\dbi hittas inte....

Linuus 2013-07-03 23:37

Skit i rdbi...


1. Installera en gem för mysql. Tex mysql2 (tror den ska vara lite bättre än mysql)
https://github.com/brianmario/mysql2

2. Tuta och kör ;) Finns massa exempel på länken ovan.





Citat:

Ursprungligen postat av ConnyWesth (Inlägg 20473315)
Ok, då fattar jag....

Trodde det var rdbi, interface mot MySQL.....


Men den gnäller fortfarande på namespace....

Följande kod har jag att testa med:

Kod:

#!ruby20
# encoding: utf-8

=begin
= Description
    The DBI package is a vendor independent interface for accessing databases.
    It is similar, but not identical to, Perl's DBI module.
   
    <DDL-script>
        delimiter $$
   
        CREATE TABLE `players`
        (
          `id` int(11) NOT NULL AUTO_INCREMENT,
          `firstname` varchar(32) NOT NULL,
          `lastname` varchar(32) NOT NULL,
          PRIMARY KEY (`id`)
        ) ENGINE=InnoDB AUTO_INCREMENT=430 DEFAULT CHARSET=latin1$$
    </DDL-script>

= Synopsis
=end

require 'rdbi\dbi'

# Same example, but a little more Ruby-ish
class Main
    def initialize()   
        @connectionstring = 'DBI:Mysql:test'
        @user = 'root'
        @password = '**************'
        test()
    end
    def test()
        @dbh = connect()
        select()
    end
    def connect()
        DBI.connect(connectionstring, user, password) do | dbh |
        return dbh
    end
    def select()       
        @dbh.select_all('select * from players') do | row |
            puts row
        end
    end
end

Main.new()


Jag har lagt in lib filerna från "rdbi-1.2.0.pre0" till Rubys lib-katalog.
Har även lagt in lib-filerna från "rdbi-driver-mysql-master" till Rubys lib-katalog.
Har även kopierat in libmysql.dll i Ruby\bin från MySQL\lib.

Men namespace rdbi\dbi hittas inte....


Nerix 2013-07-03 23:53

Ruby-utveckling under Windows kan inte vara enkelt då ingen använder platformen.

Conny Westh 2013-07-04 00:21

Citat:

Ursprungligen postat av Linuus (Inlägg 20473318)
Skit i rdbi...


1. Installera en gem för mysql. Tex mysql2 (tror den ska vara lite bättre än mysql)
https://github.com/brianmario/mysql2

2. Tuta och kör ;) Finns massa exempel på länken ovan.

Laddade ner mysql2, körde gem install mysql2....

successfully installed....

Kod:

C:\Projects\Conny\Ruby\MySQL2\mysql2-master>gem install mysql2
Fetching: mysql2-0.3.11-x86-mingw32.gem (100%)

======================================================================================================

  You've installed the binary version of mysql2.
  It was built using MySQL Connector/C version 6.0.2.
  It's recommended to use the exact same version to avoid potential issues.

  At the time of building this gem, the necessary DLL files where available
  in the following download:

  http://dev.mysql.com/get/Downloads/Connector-C/mysql-connector-c-noinstall-6.0.2-win32.zip/from/pick

  And put lib\libmysql.dll file in your Ruby bin directory, for example C:\Ruby\bin

======================================================================================================

Successfully installed mysql2-0.3.11-x86-mingw32
Parsing documentation for mysql2-0.3.11-x86-mingw32
unable to convert "\x90" from ASCII-8BIT to UTF-8 for lib/mysql2/1.8/mysql2.so, skipping
unable to convert "\x90" from ASCII-8BIT to UTF-8 for lib/mysql2/1.9/mysql2.so, skipping
Installing ri documentation for mysql2-0.3.11-x86-mingw32
1 gem installed

C:\Projects\Conny\Ruby\MySQL2\mysql2-master>

gick till exaples och försökte köra de två exempel som finns där eventmachine.rb respektive threaded.rb, inget av dem funkade.... den skriker på att require cannot load such file.... dvs mysql2

Körde även koden enligt exempel i ReadMe-filen:

Kod:

# File: mysql2_test.rb
client = Mysql2::Client.new(:host => "localhost", :database => 'test', :username => "root", :password => '**************')
results = client.query("SELECT * FROM players")
results.each do |row|
    puts row
end

Felmeddelande:

Kod:

C:\Projects\Conny\Ruby\Hello>ruby mysql2_test.rb
mysql2_test.rb:1:in `<main>': uninitialized constant Mysql2 (NameError)

C:\Projects\Conny\Ruby\Hello>


Jag kör senaste version av Ruby dvs 2.0.0p195

Nerix 2013-07-04 00:44

Har du importerat mysql2 i din kod?

`require "mysql2"`

Conny Westh 2013-07-04 01:05

Citat:

Ursprungligen postat av Nerix (Inlägg 20473325)
Har du importerat mysql2 i din kod?

`require "mysql2"`

Jag har testat både med och utan med samma resultat, dvs det blir fel.

Använder jag require "mysql2" så får jag dock betydligt fler felrader enligt:

Utan require:
Kod:

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. Med ensamrätt.

C:\Projects\Conny\Ruby\Hello>ruby mysql2_test.rb
mysql2_test.rb:1:in `<main>': uninitialized constant Mysql2 (NameError)

Med require:
Kod:

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. Med ensamrätt.

C:\Projects\Conny\Ruby\Hello>ruby mysql2_test.rb
C:/Program Files (x86)/Ruby200/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require': cannot load such file -- mysql2/2
.0/mysql2 (LoadError)
        from C:/Program Files (x86)/Ruby200/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require'
        from C:/Program Files (x86)/Ruby200/lib/ruby/gems/2.0.0/gems/mysql2-0.3.11-x86-mingw32/lib/mysql2/mysql2.rb:2:in `<top (requ
ired)>'
        from C:/Program Files (x86)/Ruby200/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require'
        from C:/Program Files (x86)/Ruby200/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require'
        from C:/Program Files (x86)/Ruby200/lib/ruby/gems/2.0.0/gems/mysql2-0.3.11-x86-mingw32/lib/mysql2.rb:9:in `<top (required)>'

        from C:/Program Files (x86)/Ruby200/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:110:in `require'
        from C:/Program Files (x86)/Ruby200/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:110:in `rescue in require'
        from C:/Program Files (x86)/Ruby200/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:35:in `require'
        from mysql2_test.rb:1:in `<main>'

C:\Projects\Conny\Ruby\Hello>


Conny Westh 2013-07-04 03:01

Jag kanske glömde nämna att jag även gått till Rybu-katalogen c:\Program Files (x86)\Ruby200 och kört:

Ruby dk.rb init

och därefter:

Ruby dk.rb install

sen körde jag:

Ruby dk.rb Review

Allt rapporteras vara OK, men när jag försöker köra:

Kod:

require "mysql2"
client = Mysql2::Client.new(:host => "localhost", :database => 'RubyTestDB', :username => "RubyTestUser", :password => 'RubyTestPassword')
results = client.query("SELECT * FROM players")
results.each do |row|
  puts row
end

Så får jag felmeddelande att den inte hittar namespace mysql2....

Kod:

....require cannot load such file -- mysql2/2.0/mysql (Load Error)

Intressant blev det dock när jag la till de två första raderna i följande kod:

Kod:

#!usr/bin/Ruby20
#encoding: utf-8

require "mysql2"
client = Mysql2::Client.new(:host => "localhost", :database => 'RubyTestDB', :username => "RubyTestUser", :password => 'RubyTestPassword')
results = client.query("SELECT * FROM players")
results.each do |row|
  puts row
end

Då fick jag färre felmeddenden:

Kod:

C:\Program Files (x86)\Ruby200\bin\Ruby.exe: no Ruby script found in input (Load Error)

>Terminated with exit code 1

Den sista raden är nog min editor Grimson som skapar, men jag får i övrigt samma felmeddelanden om jag kör direkt vid kommandoraden.

Conny Westh 2013-07-04 03:36

Jag körde återigen:

gem install mysql2

Config.yml som ligger i Ruby-katalogen ser ut så här:

Kod:

# This configuration file contains the absolute path locations of all
# installed Rubies to be enhanced to work with the DevKit. This config
# file is generated by the 'ruby dk.rb init' step and may be modified
# before running the 'ruby dk.rb install' step. To include any installed
# Rubies that were not automagically discovered, simply add a line below
# the triple hyphens with the absolute path to the Ruby root directory.
#
# Example:
#
# ---
# - C:/ruby19trunk
# - C:/ruby192dev
#
---
- C:/Program Files (x86)/Ruby200


Linuus 2013-07-04 13:49

Citat:

Ursprungligen postat av ConnyWesth (Inlägg 20473329)
Jag körde återigen:

gem install mysql2

Config.yml som ligger i Ruby-katalogen ser ut så här:

Kod:

# This configuration file contains the absolute path locations of all
# installed Rubies to be enhanced to work with the DevKit. This config
# file is generated by the 'ruby dk.rb init' step and may be modified
# before running the 'ruby dk.rb install' step. To include any installed
# Rubies that were not automagically discovered, simply add a line below
# the triple hyphens with the absolute path to the Ruby root directory.
#
# Example:
#
# ---
# - C:/ruby19trunk
# - C:/ruby192dev
#
---
- C:/Program Files (x86)/Ruby200


Och det funkar inte eller? Har aldrig kört Ruby på Windows så kan tyvärr inte hjälpa dig med det.

Men som sagt... Kör för guds skull in Linux om du ska utveckla i Ruby. Det kommer spara dig åtskilliga timmar.

Clarence 2013-07-04 14:20

Kan inte annat än hålla med. Skulle rekommendera en vagrant-installation, men för det behövs också Ruby :) Men en virtualbox installation med en headless ubuntu/debian/vadsom vore nog bra mycket smidigare än att jävlas i windows. I stort sett alla servrar som inte kör microsoft-applikationer (MSSQL, .NET osv) kör ju just *nix och därmed optimeras installationsförfaranden för just de plattformarna.

Conny Westh 2013-07-04 19:02

Linux är inte intressant och jag har Oracle Virtual Box installerad (med Ubuntu 12.04 LTS), men själva syftet är att installera och köra Ruby på just Windowsplattformen så att köra i Linux är helt ointressant.

Jag har kört C, C++, Cobol, Pascal, Visual Basic, C#, PHP i både Windows och Linuxplattformarna. Nu håller jag på med att få Ruby att fungera i Windows 7.

Jag har fått alla tidigare testprogram att fungera i Ruby, men nu verkar det som att när man installerar gem-paket så ser allt bra ut förutom att inget av de externa men installerade gem-paketen fungerar att anropa via require("<gem-paket>").

Jag la upp det simplaste exemplet (med en require och en puts-rad) och testade:

Kod:

#!usr/bin/ruby20
#encoding: utf-8

#require("geokit")
#require("csvkit")
#require("devil")
#require("devlin")
#require("cucumber")
#require("capybara")
#require("rspec")
#require("faker")
#equire("rspec-rails")
#require("sinatra")
#require("rails")
#require("bubble-wrap")
#require("railties")
#require("railspm")
#require("mssql")
require("mysql")

puts "Hello, Require()!"

- Jag har laddat ner alla dessa paket med; gem install <gem-pack>
- Alla visas när man kör; gem list
- Ingen av dem funkar med require("<gem-packet>")
- Kommenterar jag bort alla rader med require, så funkar appen


Funderingar:

Jag har kollat på massor av webbsidor med instruktioner för hur man installerar Ruby, men det verkar vara en implicit kunskap om hur man bygger gem-paket efter installation som inte förmedlas på dessa webbsidor.

Om jag förstått det hela rätt så kan man "bygga" om vissa komponenter man laddar ner för att göra dem till "paket" som kan inkluderas med require. Jag har inte hittat något fungerande exempel på hur det går till.

När man laddar ner Ruby för Windows så medföljer MinGW som är en typ av Minimalistisk C kompilator för att native-kompilera C-program. Ruby i sig självt är skrivet i C. Precis som PHP och Python.

Clarence 2013-07-04 19:13

Citat:

Ursprungligen postat av ConnyWesth (Inlägg 20473376)
Jag har kollat på massor av webbsidor med instruktioner för hur man installerar Ruby, men det verkar vara en implicit kunskap om hur man bygger gem-paket efter installation som inte förmedlas på dessa webbsidor.

Normalfallet är att köra gem install och sen require med samma namn. Detta kan dock variera lite, t ex om du har flera möjliga requires i ett gem eller skaparen var dum nog att välja ett random namn. Men troligen är något galet i din installation och paths. Då jag inte vidrör windows för annan programmering än .NET kan jag dock inte hjälpa till.

Conny Westh 2013-07-04 21:59

Ja nåt fel är det någonstans för jag ser att det finns andra som fått det att fungera:

Exempel:
http://beans.seartipy.com/2008/06/09...ndows-vistaxp/

Jag testade att uppdatera gem-systemet i sig med kommandot:
Kod:

gem update --system
Vilket verkade behövas för den uppdaterade en hel drös med saker då....


Sen körde jag uppdatering av de paket jag installerat:
Kod:

gem update
Det verkade också behövas för det var en ännu större drös med poaket som uppdaterades.

Jag såg bland annat att Bigdecimal uppdaterades och att jag fick följande information:
Kod:

Updating installed gems
Updating activeresource
Fetching: rails-observers-0.1.1.gem (100%)
Successfully installed rails-observers-0.1.1
Fetching: activeresource-4.0.0.gem (100%)
Successfully installed activeresource-4.0.0
Parsing documentation for rails-observers-0.1.1
Installing ri documentation for rails-observers-0.1.1
Installing darkfish documentation for rails-observers-0.1.1
Parsing documentation for activeresource-4.0.0
Installing ri documentation for activeresource-4.0.0
Installing darkfish documentation for activeresource-4.0.0
Updating bigdecimal
Fetching: bigdecimal-1.2.1.gem (100%)
Temporarily enhancing PATH to include DevKit...
Building native extensions.  This could take a while...
Successfully installed bigdecimal-1.2.1

Parsing documentation for bigdecimal-1.2.1
unable to convert "\xE9" from ASCII-8BIT to UTF-8 for bigdecimal.o, skipping
unable to convert "\x90" from ASCII-8BIT to UTF-8 for bigdecimal.so, skipping
Installing ri documentation for bigdecimal-1.2.1
Installing darkfish documentation for bigdecimal-1.2.1
Updating builder
Fetching: builder-3.2.2.gem (100%)
Successfully installed builder-3.2.2
Parsing documentation for builder-3.2.2
Installing ri documentation for builder-3.2.2
Installing darkfish documentation for builder-3.2.2
Updating hashie
Fetching: hashie-2.0.5.gem (100%)
Successfully installed hashie-2.0.5
Parsing documentation for hashie-2.0.5
Installing ri documentation for hashie-2.0.5
Installing darkfish documentation for hashie-2.0.5
Updating json
Building native extensions.  This could take a while...
Successfully installed json-1.8.0
Parsing documentation for json-1.8.0
unable to convert "\x90" from ASCII-8BIT to UTF-8 for lib/json/ext/generator.so, skipping
unable to convert "\x90" from ASCII-8BIT to UTF-8 for lib/json/ext/parser.so, skipping
Installing ri documentation for json-1.8.0
Installing darkfish documentation for json-1.8.0
Updating minitest
Fetching: minitest-5.0.6.gem (100%)
Successfully installed minitest-5.0.6
Parsing documentation for minitest-5.0.6
Installing ri documentation for minitest-5.0.6
Installing darkfish documentation for minitest-5.0.6
Updating rake
Fetching: rake-10.1.0.gem (100%)
rake's executable "rake" conflicts with c:/Projects/Ruby200/bin/rake
Overwrite the executable? [yN]  y
Successfully installed rake-10.1.0
Parsing documentation for rake-10.1.0
Installing ri documentation for rake-10.1.0
Installing darkfish documentation for rake-10.1.0
Updating rdoc
Fetching: rdoc-4.0.1.gem (100%)
rdoc's executable "rdoc" conflicts with c:/Projects/Ruby200/bin/rdoc
Overwrite the executable? [yN]  y
rdoc's executable "ri" conflicts with c:/Projects/Ruby200/bin/ri
Overwrite the executable? [yN]  y
Depending on your version of ruby, you may need to install ruby rdoc/ri data:

<= 1.8.6 : unsupported
 = 1.8.7 : gem install rdoc-data; rdoc-data --install
 = 1.9.1 : gem install rdoc-data; rdoc-data --install
>= 1.9.2 : nothing to do! Yay!
Successfully installed rdoc-4.0.1
Parsing documentation for rdoc-4.0.1
Installing ri documentation for rdoc-4.0.1
Installing darkfish documentation for rdoc-4.0.1
Updating test-unit
Fetching: test-unit-2.5.5.gem (100%)
Successfully installed test-unit-2.5.5
Parsing documentation for test-unit-2.5.5
Installing ri documentation for test-unit-2.5.5
Installing darkfish documentation for test-unit-2.5.5
Updating tzinfo
Fetching: tzinfo-1.0.1.gem (100%)

TZInfo Timezone Data has Moved
==============================

The timezone data previously included with TZInfo as Ruby modules has now been
moved to a separate tzinfo-data gem. TZInfo also now supports using the system
zoneinfo files on Linux, Mac OS X and other Unix-like operating systems.

If you want to continue using the Ruby timezone modules, or you are using an
operating system that does not include zoneinfo files (such as
Microsoft Windows), you will need to install tzinfo-data by running:

gem install tzinfo-data

If tzinfo-data is installed then TZInfo will use the Ruby timezone modules.
Otherwise, it will attempt to find the system zoneinfo files. Please refer to
the TZInfo documentation (available from https://rubygems.org/gems/tzinfo) for
further information.

Successfully installed tzinfo-1.0.1
Parsing documentation for tzinfo-1.0.1
Installing ri documentation for tzinfo-1.0.1
Installing darkfish documentation for tzinfo-1.0.1
Gems updated: rails-observers activeresource bigdecimal builder hashie json minitest rake rdoc test-unit tzinfo

Om man kikar på de rader jag markerat med fetstil så verkar det som systemet ändå har lyckats compilera om Bigdecimal som är en "native extension", jag tolkar det som att den har lyckats kompilera C-programmet med MinGW. Vet dock inte hur jag ska kolla att det gått vägen ännu. ska kolla om jag kan utläsa något om datumen på filerna men det säger förmodligen inte så mycket.

Jag har förstått att det är <namespace> eller <module> man ska ha som parameter vid require(<parameter>) och att <gem-packetname> är något annat egentligen. men att det är vanligt att man döper dem till samma.

Jag får forska vidare....

Conny Westh 2013-07-05 03:47

Nu tror jag att jag hittat en viktig orsak till problemet med require.

Jag misstänkte att det kunde ha med sökvägar till filerna att göra så jag grottade ner mig i filstrukturen.

Jag har nu installerat Ruby i katalogen "C:\Projects\Ruby200"

Det visar sig att modulerna som följer med Ruby från start ligger i katalogen:

Kod:

C:\\Projects\\Ruby200\\lib\\ruby\\2.0.0\\
Men gem paketen hamnar i en helt annan filstruktur, som exempelvis "csvkit"

Kod:

C:\Projects\Ruby200\lib\ruby\gems\2.0.0\gems\csvkit-0.1.3\lib\csvkit.rb"
Kod:

require("open3")  # funkar för open3 ingår från början i Ruby
Men för att kunna nå csvkit så måste man specificera så här i require()

Kod:

require("C:\\Projects\\Ruby200\\lib\\ruby\\gems\\2.0.0\\gems\\csvkit-0.1.3\\lib\\csvkit")
Ja, man måste tydligen använda dubbelbackslash "\\" när man vill ha en backslash för det följer standarden för detta från C/C++ världen.

Nu får jag inget körfel när jag specar sökvägen hela vägen ner till csvkit.rb som modulens laddfil heter.

Nu har jag i alla fall förstått vad felet beror på i grunden. Nu är nästa steg att ta reda på hur man kan lösa problemet.

Jag läste även att Ryby-projektet sedan version 1.9.2 har gjort en break på bakåtkompatibiliteten för sökvägarna. Så exempelvis current directory (".\") inte längre ingår i sökpathen.

Det borde finnas en inställning jag kan ändra för att detta ska fungera globalt, för mig, men har inte hittat den ännu.

Men om jag förstår det rätt så ligger alla extra installerade gems flera nivåer djupare i filstrukturen och man måste veta exakt version och så för att det ska gå att inkludera i källkoden.

Jag har inte hittat någon dokumentation på detta ännu, men det borde rimligen finnas någonstans.

pelmered 2013-07-05 20:29

Skulle inte den här tråden handla om Phalanger...?

Nu är det över 3 sidor som det ens nämndes i råden. Senaste sidorna har istället handlar om Ruby som har extremt lite att göra med både PHP och .Net, och därmed även Phalanger.

Vi borde försöka ha lite bättre forumdisciplin här tycker jag :)

Linuus 2013-07-05 22:55

Citat:

Ursprungligen postat av ConnyWesth (Inlägg 20473411)
Kod:

require("C:\\Projects\\Ruby200\\lib\\ruby\\gems\\2.0.0\\gems\\csvkit-0.1.3\\lib\\csvkit")
Ja, man måste tydligen använda dubbelbackslash "\\" när man vill ha en backslash för det följer standarden för detta från C/C++ världen.

Använd File.join() istället för att skapa paths.

Kod:

File.join('din', 'path', 'här')
Då fungerar även din kod i annat än Windows :)



Citat:

Ursprungligen postat av ITisGood.se (Inlägg 20473452)
Skulle inte den här tråden handla om Phalanger...?

Nu är det över 3 sidor som det ens nämndes i råden. Senaste sidorna har istället handlar om Ruby som har extremt lite att göra med både PHP och .Net, och därmed även Phalanger.

Vi borde försöka ha lite bättre forumdisciplin här tycker jag :)

Håller med... Sorry.

Conny: Du kanske ska skapa en egen tråd för Ruby istället?


Alla tider är GMT +2. Klockan är nu 17:57.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson