Je toucherai Ruby on Rails pour la première fois depuis longtemps. Je vais aborder la dernière version, donc je voudrais aider tout le monde en laissant ce mémo.
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]
--Il a été installé, mais le message qui m'intéressait était sorti.
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
$ rails -v
Rails 6.0.3.1
$ rails new helloworld
--Je n'ai spécifié aucune option cette fois, mais vous pouvez spécifier les options suivantes.
-d dbms spécifié
SQL Lite3, MySQL, Oracle, PostgreSQL, FrontBase, DB / 2 peuvent être spécifiés comme spécification du SGBD. La valeur par défaut est SQL Lite3.
DBMS | Valeur d'option |
---|---|
SQLLite3 | sqlite3 |
MySQL | mysql |
Oracle | oracle |
PostgreSQL | postgresql |
FrontBase | frontbase |
DB/2 | ibm_db |
--Si vous spécifiez mysql, ce sera comme suit.
$ rails new hoge_app -d mysql
$ rails new hoge_app -f
--ruby Utilisé pour spécifier le chemin binaire. Est-ce une option à utiliser lorsque plusieurs versions de ruby sont installées ...
$ rails new hoge_app -r /usr/bin/ruby2.7
$ rails new hoge_app -G
$ rails new hoge_app -B
$ rails new hoge_app -J
--Cette option n'inclut pas test :: unit.
$ rails new hoge_app -T
Accédez au dossier de projet helloworld que vous avez créé et exécutez la commande de démarrage du serveur.
$ 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
«Ici, je voudrais dire:« Veuillez vous connecter à localhost avec un navigateur et vérifier. »Cependant, comme mon environnement a été construit sur WSL2, j'ai conçu un moyen d'accéder à l'hôte local de WSL2 depuis l'hôte. Est requis.
--Préparez un fichier appelé
% userprofile% \ .wslconfig
. Ce qui suit est décrit dans le fichier.
localhostForwarding=True
Après cela, redémarrez Windows.
Inutile de dire que si vous redémarrez, exécutez à nouveau
rails s` '' pour démarrer le serveur Web.
Veuillez accéder à
http: // localhost: 3000` ``.
«C'est triste qu'il n'y ait pas de libellé de Hello World même s'il s'appelle un projet Hello World, donc je vais le modifier.
Appuyez sur Ctrl + C pour arrêter le serveur Web.
Assurez-vous que vous êtes dans le projet helloworld. S'il s'agit d'un répertoire différent, accédez au répertoire helloworld.
$ pwd
/home/user1/dev/ror/helloworld
$ rails g controller hello index
--Corrigez le libellé de la classe de vue comme suit.
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` '' pour démarrer le serveur Web.
--Ouvrez l'URL de `` http: // localhost: 3000 / hello / index '' dans votre navigateur.――Hello World seul est terne, donc je mentionnerai également l'échafaudage. --Le générateur d'échafaudage est une fonction qui crée une opération CRUD pour le modèle défini et la reflète dans la base de données. --Ce qui suit est comment écrire
rails g nom du modèle d'échafaudage nom de la colonne:Moule...
Nom de colonne | Moule |
---|---|
user_id | string |
content | string |
$ rails g scaffold Todo user_id:string content:string
$ 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
--Il a été confirmé que la table todos a été créée.
―― Pour le moment, recherchons la table todos.
sqlite> select * from todos;
sqlite>
Quittez le terminal sqlite. Appuyez sur Ctrl + D.
Maintenant, démarrons le serveur Web. Exécutez les fameux `` rails s` ''. Accédez ensuite à l'URL http: // localhost: 3000 / todos avec votre navigateur.
--En conséquence, il est affiché.
select * from todos;
1|sample1|Réunion de développement à partir de 10 heures|2020-06-14 12:39:29.896376|2020-06-14 12:39:29.896376
sqlite>
Que faire si la table de base de données change. Vous vous êtes peut-être demandé si vous reconstruiriez à nouveau en utilisant le générateur d'échafaudage.
Dans ce cas, utilisez la fonction de générateur de migration. Créez les modifications du schéma de base de données en tant que fichier de migration. --``` rails g migration En exécutant la commande avec le nom de migration `` `, vous ne pouvez importer que la différence DB.
En définissant le nom de la migration avec les conventions de dénomination ```Ajouter le nom de la colonne au nom de la table `` et `` `` Supprimer le nom de la colonne du nom de la table
``, vous pouvez contrôler l'ajout et la suppression de colonnes. Je vais.
―― Cependant, soyez assuré que vous pouvez modifier la définition de la table de base de données même si vous créez un fichier de migration avec un nom de migration gratuit.
À titre d'exemple, créons un fichier de migration qui ajoute des colonnes à la table todos créée précédemment.
$ 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
--Dans la description du fichier de migration, vous pouvez décrire les changements dans
def change`` ``, mais le processus ne fonctionnera pas lors de la réduction de la version de migration, donc `` `` def up '' Je pense qu'il est recommandé de décrire les changements et le contenu pour annuler les changements dans
,
def down```.
――L'exemple est décrit ci-dessous.
--Dans def up '', vous déclarez que vous voulez ajouter une colonne en faisant add_column. --Le type est défini comme une chaîne dans la colonne d'emplacement en tant qu'informations de la colonne à ajouter. --Dans
def down ''
, il est déclaré que la colonne sera supprimée en effectuant remove_column.
--Le type est défini sous forme de chaîne dans la colonne d'emplacement en tant qu'informations de la colonne à supprimer.
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
――Ainsi, vous exécuterez la migration. Exécutez la commande précédemment décrite comme magique.
$ 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
--Tous les statuts sont en place. Il semble que cela ait été pris. Jetons un coup d'œil à la définition de la table DB.
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);
--Il semble que la colonne d'emplacement a été ajoutée correctement.
$ 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
--L'état de ```Ajouter une colonne aux tâches`
est en panne, il est donc annulé.
.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);
―― En faisant bon usage de la migration, il est pratique de lier en douceur le code et la base de données.
--Visual Studio Code est un IDE recommandé pour créer un environnement ROR sur WSL. La procédure est brièvement décrite ci-dessous.
Installez Remote --WSL en tant qu'extension de Visual Studio Code.
Cliquez sur l'icône de connexion à distance en bas à gauche.
Sélectionnez une option [Remote-WSL ...] dans la palette. Ici, sélectionnez [Remote-WSL: New Window]
Vous pouvez voir que l'icône de connexion à distance en bas à gauche a changé. La notation a changé en [WSL: Ubuntu-20.04]. Sélectionnez [Ouvrir le dossier ...] pour ouvrir le dossier du projet RoR.
Comme indiqué ci-dessous, vous pouvez faire fonctionner le terminal en ouvrant la fonction d'explorateur dans l'arborescence de gauche, la fonction d'édition de fichier dans la fenêtre supérieure droite et en ouvrant le terminal avec "Ctrl + @", et vous pouvez effectuer la plupart des opérations sur le code source visuel. Donc c'est pratique.
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?
--Selon le message d'erreur, veuillez exécuter
sudo apt-get update` ``.
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.
--Republié, essayez d'installer les packages requis pour l'installation des rails avec la commande suivante.
$ sudo gem update --system
$ sudo gem install bundler
$ sudo apt-get install build-essential liblzma-dev patch ruby-dev zlib1g-dev libsqlite3-dev nodejs