Ruby on Rails používá SQLite3 jako svou výchozí databázi. I když Sqlite funguje skvěle s Rails, někdy nemusí být pro vaši aplikaci Rails dostačující. Pokud chcete škálovatelnost, souběžnost, centralizaci a kontrolu, možná budete chtít vyzkoušet robustnější databáze jako MySQL nebo PostgreSQL. V této příručce uvidíme, jak používat MySQL s aplikací Ruby on Rails v Ubuntu Linux.
1. Nainstalujte MySQL v Ubuntu
MySQL je k dispozici ve výchozích repozitářích většiny distribucí Linuxu a Unixu.
Chcete-li nainstalovat MySQL na Debian, Ubuntu a jeho deriváty, spusťte:
$ sudo apt install mysql-server mysql-client libmysqlclient-dev
Soubor libmysqlclient-dev
balíček poskytuje potřebné soubory ke kompilaci mysql2
klenot. Ruby on Rails používá mysql2
gem pro připojení k MySQL při nastavování aplikace Rails.
1.1. Nastavte heslo kořenového adresáře MySQL
Dále nastavte heslo uživatele root MySQL spuštěním následujícího příkazu:
$ sudo mysql_secure_installation
Zadejte "y" pro nastavení komponenty VALIDATE PASSWORD:
Securing the MySQL server deployment. Connecting to MySQL using a blank password. VALIDATE PASSWORD COMPONENT can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD component? Press y|Y for Yes, any other key for No: y
Vyberte úroveň ověření hesla. Dostupná ověření hesla jsou nízká , střední a silný . Zde volím nízkoúrovňové ověření hesla zadáním nuly (0).
There are three levels of password validation policy: LOW Length >= 8 MEDIUM Length >= 8, numeric, mixed case, and special characters STRONG Length >= 8, numeric, mixed case, special characters and dictionary file Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0
Dále dvakrát zadejte heslo root MySQL. Heslo by mělo být silné a mělo by mít minimálně 8 znaků. Stiskněte Y pokračovat:
Please set the password for root here. New password: Re-enter new password: Estimated strength of the password: 100 Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
Dále vám bude položena řada otázek. Zadejte y a u každé otázky stiskněte ENTER. Toto odebere anonymního uživatele, zakáže vzdálené přihlášení uživatele root a odstraní testovací databázi.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y Success. Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y Success. By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y - Dropping test database... Success. - Removing privileges on test database... Success. Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y Success. All done!
Hotovo! Nastavili jsme heslo uživatele root MySQL.
1.2. Nainstalujte ovladač MySQL
Nainstalujte ovladač MySQL s názvem mysql2
drahokam, který umožňuje aplikaci Rails připojit se k databázi MySQL.
$ gem install mysql2
Vše hotovo! Aplikace Rails se nyní mohou připojit k databázovému serveru MySQL.
Pojďme vpřed a vytvořte novou aplikaci Rails s databází MySQL.
2. Používejte MySQL s aplikací Ruby on Rails
Chcete-li vytvořit novou aplikaci Rails s názvem ostechnixapp
a použít databázi MySQL jako výchozí databázi, spusťte:
$ rails new ostechnixapp -d mysql
Tím se vytvoří aplikace Rails s názvem ostechnixapp v adresáři s názvem ostechnixapp
a nainstalujte závislosti drahokamů, které jsou již zmíněny v Gemfile
pomocí bundle install
.
Po vytvoření ostechnixapp
aplikace, přepněte do jejího adresáře:
$ cd ostechnixapp/
Upravte konfigurační soubor databáze aplikace:
$ vi config/database.yml
Ve výchozí sekci nahraďte root
MySQL uživatelské heslo s tím, které jste vytvořili dříve:
[...] default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: Password123#@! socket: /var/run/mysqld/mysqld.sock [...]
Uložte a zavřete soubor.
Nyní vytvořte novou databázi pro vaši aplikaci Rails pomocí příkazu:
$ rake db:create
Tím vytvoříte dvě databáze s názvem vaší aplikace Rails. Pokud je například název aplikace ostechnixapp, vytvoří se ostechnixapp_development
a ostechnixapp_test
.
Můžete ověřit, zda jsou databáze úspěšně vytvořeny také z MySQL.
Přihlaste se do MySQL jako root
uživatel:
$ mysql -u root -p
Ověřte, zda jsou databáze vytvořeny zadáním následujícího příkazu:
mysql> show databases;
Ukázkový výstup:
+--------------------------+ | Database | +--------------------------+ | information_schema | | mysql | | ostechnixapp_development | | ostechnixapp_test | | performance_schema | | sys | +--------------------------+ 6 rows in set (0.01 sec) mysql>
Ukončete výzvu MySQL.
Nyní spusťte webový server Rails pomocí příkazu:
$ rails server -b 0.0.0.0
Tím se spustí vaše aplikace Rails na výchozím portu 3000
. Zde jsme předali argument -b 0.0.0.0
za účelem přístupu k aplikaci Rails z libovolného počítače v místní síti.
Ke své testovací stránce Rails se dostanete ve webovém prohlížeči tak, že přejdete na adresu URL:http://ip-address:3000
Pokud chcete použít jiný port, předejte -p příznak spolu s číslem portu, jak je uvedeno níže:
$ rails server -b 0.0.0.0 -p 8080
Nyní můžete přistupovat ke své aplikaci Rails pomocí této adresy URL:http://ip-address:8080
3. Smazat aplikaci Rails
Pokud jste použili výchozí databázi, kterou je SQLite, můžete aplikaci Rails smazat jednoduchým smazáním jejího adresáře aplikace.
$ rm -fr ostechnixapp
Pokud jste používali MySQL, musíte nejprve zrušit související databáze vaší aplikace pomocí příkazu:
$ rake db:drop
A poté smažte adresář aplikace:
$ rm -fr ostechnixapp
Závěr
V tomto tutoriálu jsme diskutovali, proč potřebujeme pro naši aplikaci Rails používat modelové databáze klient/server a jak vytvořit aplikaci Rails s databází MySQL. Také jsme viděli, jak odstranit aplikaci Rails.
Pokud běží několik kopií aplikace Rails současně, několik aplikací a uživatelů používá stejnou databázi, měli byste se od Sqlite odklonit a vyzkoušet modelové databáze klient/server, jako je MySQL. Pokud chcete lokální úložiště dat pro jednotlivé aplikace, Sqlite je více než dostačující.
Související čtení:
- Jak používat PostgreSQL s aplikací Ruby On Rails
- Konfigurace připojení k databázi pomocí proměnné prostředí v Rails