Updated May 2: erlweb:compile(AppDir::string(), Options::[option()]) has option: {auto_compile, Val}, where Val is 'true', or 'false'. In case of development, you can turn on {auto_compile, true}. So, you only need to run
erlyweb_app:boot("myapp") once.
2. Manage project
Erlyweb provides erlyweb:compile(App, ..) to compile the source files under app directory. To start an app, you usually should erlydb:start(mysql, ....) and compile app files first. To make life easy, you can put some scripting like code under myproject\script directory. Here's my project source tree:
myproject
+ apps
| + myapp
| + ebin
| + include
| + nbproject
| + src
| + components
| + lib
| + services
| + test
| + www
+ config
| * yaws.conf
+ script
+ ebin
* erlyweb_app.erl
Where, config/yaws.conf contains the configuration that will copy/paste to your real yaws.conf file. Here's mine:
## This is the configuration of apps that will copy/paste to your yaws.conf.
ebin_dir = D:/myapp/trunk/script/ebin
ebin_dir = D:/myapp/trunk/apps/myapp/ebin
<server localhost>
port = 8000
listen = 0.0.0.0
docroot = D:/myapp/trunk/apps/myapp/www
appmods = </myapp, erlyweb>
<opaque>
appname = myapp
</opaque>
</server>
You may have noticed, all beams under D:/myapp/trunk/script/ebin and D:/myapp/trunk/apps/myapp/ebin will be auto-loaded by yaws.
erlyweb_app.erl is the boot scripting code, which will be used to start db connection and compile the code. Currently I run these scripts manually. I'll talk later.
-module(erlyweb_app).
-export([main/1, boot/1, build/1, start_db/0]).
main([AppName]) ->
boot(AppName);
main(_) ->
usage().
boot(AppName) ->
build(AppName, true).
build(AppName) ->
build(AppName, false).
build(AppName, AutoCompile) ->
start_db(),
compile(AppName, [{auto_compile, AutoCompile}]).
start_db() ->
erlydb:start(
mysql,
[{hostname, "localhost"},
{username, "mememe"},
{password, "uuu"},
{database, "myapp_dev"}]).
compile(AppName, Options) ->
erlyweb:compile(
"./apps/" ++ AppName,
[{erlydb_driver, mysql}] ++ Options).
usage() ->
io:format("usage: erlyweb_app AppName\n"),
halt(1).
So, I start myapp by steps:
cd \myproject
yaws -i -sname yaws
1> erlyweb_app:build("myapp").
The erlyweb_app.erl is almost escript ready, but I use it as module functions currently. It's pre-compiled and erlyweb_app.beam is placed under script/ebin
After I made changes to myapp, I run above erlyweb_app:build("myapp"). again, then everything is up to date.
This is sure not the best way to handle the write-compile-run-test cycle, I'll improve the scripting to let starting yaws as a node, then hot-swap the compiled code to it.
Comparing to Rails, the Erlyweb project management needs improvement, such as store the database configuration in a plain environment file, and auto load it etc.
It's a good experience to play with Rails, I like rake db:migrate, script, config folder of Rails. And Grails also brings some good idea to manage web app project tree. I'll try to bring them into project manager of ErlyBird.
分享到:
相关推荐
rails-dev-box, 面向 Ruby on Rails 核心开发的虚拟机 用于 Ruby on Rails 核心开发的虚拟机简介注意:这个虚拟机不是为 Rails 应用程序开发而设计的,只是为。 这个项目自动设置开发环境,以便在 Ruby on Rails ...
rails-angular-postgres-and-bootstrap-second-edition 英文原版
rails-exporter-源码.rar
rails-documentation-2-0-2
rails-beginner-s-guide是Rails 指导手册,帮组学习了解rails开发
用于Ruby on Rails核心开发的虚拟机 介绍 请注意,该虚拟机并非为...host $ cd rails-dev-box host $ vagrant up 而已。 安装完成后,您可以使用以下命令访问虚拟机: host $ vagrant ssh Welcome to Ubuntu 20.10
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
awesome-rails-gem-zh_CN, Rails 常用 Gem 列表 - Awesome Rails Gem 中文版
rails-react-components-源码.rar
rails-builds-test-源码.rar
rails-yelp-mvp-源码.rar
rails-development-environment-master.rar
Ruby on Rails 初体验--北大青鸟教师专题讲座PPT 想学Ruby的赶快下载看看。 Ruby--目前最快速开发工具
Ruby on Rails Guides v2 - Ruby on Rails 4.2.5
rails-documentation-1-2-1.zip
rails-documentation-1-2-0-rc1.chm
rails-ftw-v0.18-2.1.5-4.1.8.exe用于在windows环境下搭建readmine环境
rails-playlists-源码.rar
rails-tutorial-源码.rar
Ruby on Rails入门经典-例子,有很多rails工程实例。