Ich werde Ruby on Rails zum ersten Mal seit langer Zeit berühren. Ich werde auf die neueste Version eingehen, daher möchte ich allen helfen, indem ich dieses Memo hinterlasse.
Ubuntu20.04 (on Windows10 WSL2)
$ sudo apt-get install ruby
$ ruby -v
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux-gnu]
Suggested packages:
apache2 | lighttpd | httpd ri ruby-dev bundler
$ sudo gem update --system
$ sudo gem install bundler
$ sudo apt-get install build-essential liblzma-dev patch ruby-dev zlib1g-dev libsqlite3-dev nodejs sqlite3
$ sudo gem install rails
--Überprüfen Sie, ob Schienen installiert sind. Es scheint, dass 6.0.3.1 installiert wurde.
$ rails -v
Rails 6.0.3.1
$ rails new helloworld
-d dbms angegeben
SQL Lite3, MySQL, Oracle, PostgreSQL, FrontBase, DB / 2 können als DBMS-Spezifikation angegeben werden. Der Standardwert ist SQL Lite3.
DBMS | Optionswert |
---|---|
SQLLite3 | sqlite3 |
MySQL | mysql |
Oracle | oracle |
PostgreSQL | postgresql |
FrontBase | frontbase |
DB/2 | ibm_db |
$ rails new hoge_app -d mysql
$ rails new hoge_app -f
--ruby Wird verwendet, um den Binärpfad anzugeben. Ist es eine Option zu verwenden, wenn mehrere Versionen von Ruby installiert sind ...
$ rails new hoge_app -r /usr/bin/ruby2.7
--Diese Option enthält nicht .gitignore.
$ rails new hoge_app -G
--Diese Option wird nicht installiert.
$ rails new hoge_app -B
--Diese Option enthält kein Javascript.
$ rails new hoge_app -J
--Diese Option enthält nicht test :: unit.
$ rails new hoge_app -T
Wechseln Sie zu dem von Ihnen erstellten helloworld-Projektordner und führen Sie den Serverstartbefehl aus.
$ cd helloworld/
$ rails s
Warning: the running version of Bundler (2.1.2) is older than the version that created the lockfile (2.1.4). We suggest you to upgrade to the version that created the lockfile by running `gem install bundler:2.1.4`.
=> Booting Puma
=> Rails 6.0.3.1 application starting in development
=> Run `rails server --help` for more startup options
Puma starting in single mode...
* Version 4.3.5 (ruby 2.7.0-p0), codename: Mysterious Traveller
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://127.0.0.1:3000
* Listening on tcp://[::1]:3000
Use Ctrl-C to stop
――Hier möchte ich sagen: „Bitte stellen Sie mit einem Browser eine Verbindung zu localhost her und überprüfen Sie dies.“ Da meine Umgebung jedoch auf WSL2 basiert, habe ich eine Möglichkeit entwickelt, vom Host aus auf localhost von WSL2 zuzugreifen. Wird benötigt.
localhostForwarding=True
`Rails s
`erneut aus, um den Webserver zu starten.--Bitte greifen Sie auf `http: // localhost: 3000
`zu.
――Es ist traurig, dass es keinen Wortlaut von Hello World gibt, obwohl es als Hello World-Projekt bezeichnet wird, also werde ich es ändern.
Drücken Sie Strg + C, um den Webserver zu stoppen.
Stellen Sie sicher, dass Sie im helloworld-Projekt sind. Wenn es sich um ein anderes Verzeichnis handelt, wechseln Sie in das Verzeichnis helloworld.
$ pwd
/home/user1/dev/ror/helloworld
$ rails g controller hello index
rb:index.html.erb
<h1>Hello#index</h1>
<p>Find me in app/views/hello/index.html.erb</p>
<p>Hello World</p>
`Rails s
aus, um den Webserver zu starten. --Öffnen Sie die URL von ``
http: // localhost: 3000 / hello / index``` in Ihrem Browser.»Hallo Welt allein ist langweilig, deshalb werde ich auch das Gerüst erwähnen.
Schienen g Gerüstmodellname Spaltenname:Schimmel...
--Beispielmodellname: todo
Spaltenname | Schimmel |
---|---|
user_id | string |
content | string |
$ rails g scaffold Todo user_id:string content:string
--Nächste erstellen Sie eine Tabelle. ――Bitte rezitieren Sie die Magie unten.
$ rake db:migrate
== 20200614122106 CreateTodos: migrating ======================================
-- create_table(:todos)
-> 0.0079s
== 20200614122106 CreateTodos: migrated (0.0102s) =============================
rails dbconsole
Warning: the running version of Bundler (2.1.2) is older than the version that created the lockfile (2.1.4). We suggest you to upgrade to the version that created the lockfile by running `gem install bundler:2.1.4`.
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite> .tables
sqlite> .tables
ar_internal_metadata schema_migrations todos
»Lass uns vorerst die todos-Tabelle durchsuchen.
sqlite> select * from todos;
sqlite>
Beenden Sie das SQLite-Terminal. Drücken Sie Strg + D.
Jetzt starten wir den Webserver. Führen Sie die bekannten `Schienen s
`aus. Greifen Sie dann mit Ihrem Browser auf die URL http: // localhost: 3000 / todos zu.
select * from todos;
1|sample1|Entwicklungstreffen ab 10 Uhr|2020-06-14 12:39:29.896376|2020-06-14 12:39:29.896376
sqlite>
Was tun, wenn sich die DB-Tabelle ändert? Sie fragen sich möglicherweise, ob Sie den Gerüstgenerator erneut verwenden sollten.
Verwenden Sie in diesem Fall die Migrationsgeneratorfunktion. Erstellen Sie die Änderungen des DB-Schemas als Migrationsdatei. --``` Rails g Migration Durch Ausführen des Befehls mit dem Migrationsnamen `` `können Sie nur die DB-Differenz importieren.
Durch Definieren des Migrationsnamens mit den Namenskonventionen `Spaltenname zum Tabellennamen hinzufügen
und
Spaltenname aus Tabellenname entfernen
`` können Sie das Hinzufügen und Löschen von Spalten steuern. Ich werde.
――Versichern Sie sich jedoch, dass Sie die DB-Tabellendefinition auch dann ändern können, wenn Sie eine Migrationsdatei mit einem freien Migrationsnamen erstellen.
Als Beispiel erstellen wir eine Migrationsdatei, die der zuvor erstellten todos-Tabelle Spalten hinzufügt.
$ rails g migration AddColumnTodos
Warning: the running version of Bundler (2.1.2) is older than the version that created the lockfile (2.1.4). We suggest you to upgrade to the version that created the lockfile by running `gem install bundler:2.1.4`.
Running via Spring preloader in process 764
invoke active_record
create db/migrate/20200614130727_add_column_todos.rb
20200614130727_add_column_todos.rb
class AddColumnTodos < ActiveRecord::Migration[6.0]
def change
end
end
def change`
beschreiben, aber der Prozess wird beim Verringern der Migrationsversion nicht ausgeführt, also `` def up
` Ich denke, es wird empfohlen, die Änderungen und den Inhalt zu beschreiben, um die Änderungen in "," def down "" rückgängig zu machen.――Das Beispiel wird unten beschrieben.
def down
wird deklariert, dass die Spalte durch Ausführen von remove_column gelöscht wird.20200614130727_add_column_todos.rb
class AddColumnTodos < ActiveRecord::Migration[6.0]
def up
add_column :todos, :location, :string
end
def down
remove_column :todos, :location, :string
end
end
rails db:migrate:status
Warning: the running version of Bundler (2.1.2) is older than the version that created the lockfile (2.1.4). We suggest you to upgrade to the version that created the lockfile by running `gem install bundler:2.1.4`.
database: db/development.sqlite3
Status Migration ID Migration Name
--------------------------------------------------
up 20200614122106 Create todos
down 20200614130727 Add column todos
――So führen Sie die Migration aus. Führen Sie den Befehl aus, der zuvor als Magie beschrieben wurde.
$ rake db:migrate
== 20200614130727 AddColumnTodos: migrating ===================================
-- add_column(:todos, :location, :string)
-> 0.0049s
== 20200614130727 AddColumnTodos: migrated (0.0052s) ==========================
$ rails db:migrate:status
Warning: the running version of Bundler (2.1.2) is older than the version that created the lockfile (2.1.4). We suggest you to upgrade to the version that created the lockfile by running `gem install bundler:2.1.4`.
database: db/development.sqlite3
Status Migration ID Migration Name
--------------------------------------------------
up 20200614122106 Create todos
up 20200614130727 Add column todos
--Alle Status ist aktiv. Es scheint, dass es aufgenommen wurde. Werfen wir einen Blick auf die DB-Tabellendefinition.
sqlite> .schema todos
CREATE TABLE IF NOT EXISTS "todos" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "user_id" varchar, "content" varchar, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL, "location" varchar);
Es scheint, dass die Standortspalte korrekt hinzugefügt wurde.
Die Migration kann auch rückgängig gemacht werden. Es scheint jedoch eins nach dem anderen zu sein --Rollen Sie die soeben angewendete Migration zurück. Führen Sie den folgenden Befehl aus.
$ rails db:rollback
Warning: the running version of Bundler (2.1.2) is older than the version that created the lockfile (2.1.4). We suggest you to upgrade to the version that created the lockfile by running `gem install bundler:2.1.4`.
== 20200614130727 AddColumnTodos: reverting ===================================
-- remove_column(:todos, :location, :string)
-> 0.0547s
== 20200614130727 AddColumnTodos: reverted (0.0553s) ==========================
$ rails db:migrate:status
Warning: the running version of Bundler (2.1.2) is older than the version that created the lockfile (2.1.4). We suggest you to upgrade to the version that created the lockfile by running `gem install bundler:2.1.4`.
database: db/development.sqlite3
Status Migration ID Migration Name
--------------------------------------------------
up 20200614122106 Create todos
down 20200614130727 Add column todos
Der Status von Spalte todos hinzufügen`
ist nicht verfügbar, daher wird ein Rollback durchgeführt.
Schauen wir uns auch die DB-Tabelle an.
.schema todos
CREATE TABLE IF NOT EXISTS "todos" ("id" integer NOT NULL PRIMARY KEY, "user_id" varchar DEFAULT NULL, "content" varchar DEFAULT NULL, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL);
――Durch gute Nutzung der Migration ist es bequem, Code und Datenbank reibungslos zu verknüpfen.
Installieren Sie Remote --WSL als Erweiterung von Visual Studio Code.
Klicken Sie unten links auf das Symbol für die Remoteverbindung.
Wählen Sie eine beliebige Option [Remote-WSL ...] aus der Palette. Wählen Sie hier [Remote-WSL: Neues Fenster]
Sie können sehen, dass sich das Remoteverbindungssymbol unten links geändert hat. Die Notation wurde in [WSL: Ubuntu-20.04] geändert. Wählen Sie [Ordner öffnen ...], um den RoR-Projektordner zu öffnen.
Wie unten gezeigt, können Sie das Terminal bedienen, indem Sie die Explorer-Funktion in der Baumstruktur links und die Dateibearbeitungsfunktion im oberen rechten Fenster öffnen und das Terminal mit "Strg + @" öffnen. Sie können die meisten Vorgänge für den visuellen Quellcode ausführen. So ist es bequem.
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/l/linux/linux-libc-dev_5.4.0-33.37_amd64.deb 404 Not Found [IP: 91.189.88.152 80]
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
ERROR: Error installing rails:
ERROR: Failed to build gem native extension.
current directory: /var/lib/gems/2.7.0/gems/nokogiri-1.10.9/ext/nokogiri
/usr/bin/ruby2.7 -I /usr/lib/ruby/2.7.0 -r ./siteconf20200614-4621-1erqs4m.rb extconf.rb
checking if the C compiler accepts ... *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
$ sudo gem update --system
$ sudo gem install bundler
$ sudo apt-get install build-essential liblzma-dev patch ruby-dev zlib1g-dev libsqlite3-dev nodejs