使用Docker构建Rails 6环境
首先
我打算使用Docker来构建Rails的开发环境。
前提 tí)
Ruby 3.0.6
Rails 6.1.0
Node 14.x
Ruby 3.0.6、Rails 6.1.0、Node 14.x
创建一个新的Rails应用
首先,建立好Ruby的环境,然后安装Rails。
FROM ruby:3.0.6
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
WORKDIR /myapp
version: '3'
services:
db:
image: postgres
volumes:
- ./tmp/db:/var/lib/postgresql/data
web:
build: .
command: bash
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
如果可以创建此文件,则执行以下命令进入容器内部。
docker-compose exec web
在容器中安装Rails。
gem install -v 6.1.0 rails
在这里,我们正在安装指定版本为6.1.0的软件。
安装完成后,让我们创建一个指定版本为6.1.0的Rails应用程序。
rails _6.1.0_ new . --database=postgresql
如果执行上述命令可能会显示以下错误消息,稍后会进行处理。
Yarn not installed. Please download and install Yarn from https://yarnpkg.com/lang/en/docs/install/
由于我们也能够创建Rails应用程序,所以我们将更新Dockerfile和docker-compose.yml。
FROM ruby:3.0.6
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
version: '3'
services:
db:
image: postgres
volumes:
- ./tmp/db:/var/lib/postgresql/data
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
前端
我将解决之前出现的yarn未安装的问题。
另外,在Rails 6中,如果Node的版本过新,可能无法正常运行,因此建议安装版本14系列。
FROM ruby:3.0.6
RUN apt-get update -qq && apt-get install -y curl postgresql-client
RUN curl -sL https://deb.nodesource.com/setup_14.x | bash - \
&& apt-get install -y nodejs \
&& curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
&& echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \
&& apt-get update && apt-get install -y yarn
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
更新Dockerfile后,执行构建命令并向容器中添加yarn工具。
docker-compose build
如果能够添加yarn,我会在rails中添加webpacker。
docker-compose run web rails webpacker:install
数据库
接下来是关于数据库设置的部分。
在database.yml和docker-compose.yml中设定密码。
default: &default
adapter: postgresql
encoding: unicode
host: db
username: postgres
password: password
pool: 5
development:
<<: *default
database: myapp_development
test:
<<: *default
database: myapp_test
production:
<<: *default
database: myapp_production
username: postgres
password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>
version: '3'
services:
db:
image: postgres
environment:
POSTGRES_PASSWORD: password
volumes:
- ./tmp/db:/var/lib/postgresql/data
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
如果構建容器,就能创建rails的数据库。
docker-compose run web rails db:create
微调整
也许只是我的环境出了问题,但我计划处理一下,因为在使用webpacker编译时出现了错误。
这是最初出现的错误。
Error: Cannot find package '@babel/plugin-proposal-private-methods' imported from /myapp/babel-virtual-resolve-base.js
我们可以按照错误信息的指示安装缺少的软件包。
docker-compose run web yarn add @babel/plugin-proposal-private-methods
下面是接下来发生的错误。
Error: [BABEL]: --- PLACEHOLDER PACKAGE ---
This @babel/plugin-proposal-private-property-in-object version is not meant to
be imported. Something is importing
@babel/plugin-proposal-private-property-in-object without declaring it in its
dependencies (or devDependencies) in the package.json file.
Add "@babel/plugin-proposal-private-property-in-object" to your devDependencies
to work around this error. This will make this message go away
我将根据错误消息在开发环境中安装所需的软件包。
docker-compose run web yarn --dev add @babel/plugin-proposal-private-property-in-object
通过执行以上两步处理,我成功解决了与webpacker相关的错误。我能够通过启动容器来查看Rails界面。
